SecureString.RemoveAt(Int32) Método

Definición

Quita de esta cadena segura el carácter que se encuentra en la posición de índice especificada.Removes the character at the specified index position from this secure string.

public:
 void RemoveAt(int index);
[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
public void RemoveAt (int index);
member this.RemoveAt : int -> unit
Public Sub RemoveAt (index As Integer)

Parámetros

index
Int32

Posición de índice de un carácter en esta cadena segura.The index position of a character in this secure string.

Atributos

Excepciones

Esta cadena segura ya se ha desechado.This secure string has already been disposed.

Esta cadena segura es de sólo lectura.This secure string is read-only.

El parámetro index es menor que cero o mayor o igual que la longitud de la cadena segura en cuestión.index is less than zero, or greater than or equal to the length of this secure string.

Error al proteger o desproteger el valor de esta cadena segura.An error occurred while protecting or unprotecting the value of this secure string.

Ejemplos

En el ejemplo siguiente se muestra AppendCharcómo InsertAtlos RemoveAtmétodos SetAt,, Clear , y afectan al valor de SecureString un objeto.The following example demonstrates how the AppendChar, InsertAt, RemoveAt, SetAt, and Clear methods affect the value of a SecureString object.

using namespace System;
using namespace System::Security;

void main()
{
    String^ msg = L"   The current length of the SecureString object: {0}\n";
    SecureString ^ ss = gcnew SecureString;

    Console::WriteLine(L"1) Instantiate the SecureString object:");
    Console::WriteLine(msg, ss->Length );

    Console::WriteLine(L"2) Append 'a' to the value:");
    ss->AppendChar('a');
    Console::WriteLine(msg, ss->Length );

    Console::WriteLine(L"3) Append 'X' to the value:");
    ss->AppendChar('X');
    Console::WriteLine(msg, ss->Length);

    Console::WriteLine(L"4) Append 'c' to the value:");
    ss->AppendChar('c');
    Console::WriteLine(msg, ss->Length);

    Console::WriteLine(L"5) Insert 'd' at the end of the value:");
    ss->InsertAt(ss->Length, 'd');
    Console::WriteLine(msg, ss->Length);

    Console::WriteLine(L"6) Remove the last character ('d') from the value:");
    ss->RemoveAt(3);
    Console::WriteLine(msg, ss->Length);

    Console::WriteLine(L"7) Set the second character ('X') of the value to 'b':" );
    ss->SetAt(1, 'b');
    Console::WriteLine(msg, ss->Length );

    Console::WriteLine(L"8) Delete the value of the SecureString object:");
    ss->Clear();
    Console::WriteLine(msg, ss->Length);

    delete ss;
}

/*
This code example produces the following results:

This example demonstrates the effect of the AppendChar, InsertAt,
RemoveAt, SetAt, and Clear methods on the value of a SecureString
object. This example simulates the value of the object because the
actual value is encrypted.

1) The initial value of the SecureString object:
   SecureString = ""
   Length = 0

2) AppendChar: Append 'a' to the value:
   SecureString = "a"
   Length = 1

3) AppendChar: Append 'X' to the value:
   SecureString = "aX"
   Length = 2

4) AppendChar: Append 'c' to the value:
   SecureString = "aXc"
   Length = 3

5) InsertAt: Insert 'd' at the end of the value (equivalent
     to AppendChar):
   SecureString = "aXcd"
   Length = 4

6) RemoveAt: Remove the last character ('d') from the value:
   SecureString = "aXc"
   Length = 3

7) SetAt: Set the second character ('X') of the value to 'b':
   SecureString = "abc"
   Length = 3

8) Clear: Delete the value of the SecureString object:
   SecureString = ""
   Length = 0
*/
using System;
using System.Security;

class Example
{
    public static void Main() 
    {
       string msg = "The curent length of the SecureString object: {0}\n";
       Console.WriteLine("1) Instantiate the SecureString object.");
       SecureString ss = new SecureString();
       Console.WriteLine(msg, ss.Length);

       Console.WriteLine("2) Append 'a' to the value.");
       ss.AppendChar('a');
       Console.WriteLine(msg, ss.Length);

       Console.WriteLine("3) Append 'X' to the value.");
       ss.AppendChar('X');
       Console.WriteLine(msg, ss.Length);

       Console.WriteLine("4) Append 'c' to the value.");
       ss.AppendChar('c');
       Console.WriteLine(msg, ss.Length);

       Console.WriteLine("5) Insert 'd' at the end of the value.");
       ss.InsertAt(ss.Length, 'd');
       Console.WriteLine(msg, ss.Length);

       Console.WriteLine("6) Remove the last character ('d') from the value.");
       ss.RemoveAt(3);
       Console.WriteLine(msg, ss.Length);

       Console.WriteLine("7) Set the second character of the value to 'b'.");
       ss.SetAt(1, 'b');
       Console.WriteLine(msg, ss.Length);

       Console.WriteLine("8) Delete the value of the SecureString object:");
       ss.Clear();
       Console.WriteLine(msg, ss.Length);
       
       ss.Dispose();
    }
}
// The example displays the following output:
//       1) Instantiate the SecureString object.
//       The curent length of the SecureString object: 0
//
//       2) Append 'a' to the value.
//       The curent length of the SecureString object: 1
//
//       3) Append 'X' to the value.
//       The curent length of the SecureString object: 2
//
//       4) Append 'c' to the value.
//       The curent length of the SecureString object: 3
//
//       5) Insert 'd' at the end of the value.
//       The curent length of the SecureString object: 4
//
//       6) Remove the last character ('d') from the value.
//       The curent length of the SecureString object: 3
//
//       7) Set the second character of the value to 'b'.
//       The curent length of the SecureString object: 3
//
//       8) Delete the value of the SecureString object:
//       The curent length of the SecureString object: 0
Imports System.Security

Module Example
    Public Sub Main()
       Dim msg As String = "The curent length of the SecureString object: {0}" + vbCrLf
       Console.WriteLine("1) Instantiate the SecureString object.")
       Dim ss As New SecureString()
       Console.WriteLine(msg, ss.Length)

       Console.WriteLine("2) Append 'a' to the value.")
       ss.AppendChar("a"c)
       Console.WriteLine(msg, ss.Length)

       Console.WriteLine("3) Append 'X' to the value.")
       ss.AppendChar("X"c)
       Console.WriteLine(msg, ss.Length)

       Console.WriteLine("4) Append 'c' to the value.")
       ss.AppendChar("c"c)
       Console.WriteLine(msg, ss.Length)

       Console.WriteLine("5) Insert 'd' at the end of the value.")
       ss.InsertAt(ss.Length, "d"c)
       Console.WriteLine(msg, ss.Length)

       Console.WriteLine("6) Remove the last character ('d') from the value.")
       ss.RemoveAt(3)
       Console.WriteLine(msg, ss.Length)

       Console.WriteLine("7) Set the second character of the value to 'b'.")
       ss.SetAt(1, "b"c)
       Console.WriteLine(msg, ss.Length)

       Console.WriteLine("8) Delete the value of the SecureString object:")
       ss.Clear()
       Console.WriteLine(msg, ss.Length)

       ss.Dispose()
    End Sub
End Module
' The example displays the following output:
'       1) Instantiate the SecureString object.
'       The curent length of the SecureString object: 0
'
'       2) Append 'a' to the value.
'       The curent length of the SecureString object: 1
'
'       3) Append 'X' to the value.
'       The curent length of the SecureString object: 2
'
'       4) Append 'c' to the value.
'       The curent length of the SecureString object: 3
'
'       5) Insert 'd' at the end of the value.
'       The curent length of the SecureString object: 4
'
'       6) Remove the last character ('d') from the value.
'       The curent length of the SecureString object: 3
'
'       7) Set the second character of the value to 'b'.
'       The curent length of the SecureString object: 3
'
'       8) Delete the value of the SecureString object:
'       The curent length of the SecureString object: 0

En el ejemplo siguiente se muestra AppendChar cómo RemoveAt se pueden usar los métodos y para recopilar los caracteres de una contraseña.The following example demonstrates how the AppendChar and RemoveAt methods can be used to collect the characters in a password.

using namespace System;
using namespace System::Security;

void main()
{
   bool go = true;
   ConsoleKeyInfo cki;
   String^ m = L"\nEnter your password (up to 15 letters, numbers, and underscores)\n"
               L"Press BACKSPACE to delete the last character entered. " +
               L"\nPress Enter when done, or ESCAPE to quit:";
   SecureString ^ password = gcnew SecureString;
   int top;
   int left;
   
   // The Console.TreatControlCAsInput property prevents CTRL+C from
   // ending this example.
   Console::TreatControlCAsInput = true;

   Console::Clear();
   Console::WriteLine(m);
   
   top = Console::CursorTop;
   left = Console::CursorLeft;

   do {
      cki = Console::ReadKey(true);
      if (cki.Key == ConsoleKey::Escape)
         break;

      if (cki.Key == ConsoleKey::Backspace){
         if (password->Length > 0) {
            Console::SetCursorPosition(left + password->Length - 1, top);
            Console::Write(' ');
            Console::SetCursorPosition(left + password->Length - 1, top);
            password->RemoveAt(password->Length - 1);
         }
      }
      else {
         if ((password->Length < 15) &&
             (Char::IsLetterOrDigit( cki.KeyChar ) ||
              cki.KeyChar == '_') ) {
            password->AppendChar( cki.KeyChar );
            Console::SetCursorPosition( left + password->Length - 1, top );
            Console::Write("*");
         }
      }
   } while (cki.Key != ConsoleKey::Enter & password->Length < 15);

   // Make the password read-only to prevent modification.
   password->MakeReadOnly();
   // Dispose of the SecureString instance.
   delete password;

}
// The example displays output like the following:
//    Enter your password (up to 15 letters, numbers, and underscores)
//    Press BACKSPACE to delete the last character entered.
//    Press Enter when done, or ESCAPE to quit:
//    ************
using System;
using System.Security;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      String m = "\nEnter your password (up to 15 letters, numbers, and underscores)\n" +
                 "Press BACKSPACE to delete the last character entered. " +
                 "\nPress Enter when done, or ESCAPE to quit:";
      SecureString password = new SecureString();
      int top, left;

      // The Console.TreatControlCAsInput property prevents CTRL+C from
      // ending this example.
      Console.TreatControlCAsInput = true;

      Console.Clear();
      Console.WriteLine(m);

      top  = Console.CursorTop;
      left = Console.CursorLeft;

      // Read user input from the console. Store up to 15 letter, digit, or underscore
      // characters in a SecureString object, or delete a character if the user enters
      // a backspace. Display an asterisk (*) on the console to represent each character
      // that is stored.

      do {
         cki = Console.ReadKey(true);
         if (cki.Key == ConsoleKey.Escape) break;

         if (cki.Key == ConsoleKey.Backspace) {
            if (password.Length > 0) {
               Console.SetCursorPosition(left + password.Length - 1, top);
               Console.Write(' ');
               Console.SetCursorPosition(left + password.Length - 1, top);
               password.RemoveAt(password.Length-1);
            }
         }
         else {
            if ((password.Length < 15) &&
                 (Char.IsLetterOrDigit(cki.KeyChar) || cki.KeyChar == '_')) {
               password.AppendChar(cki.KeyChar);
               Console.SetCursorPosition(left+password.Length-1, top);
               Console.Write('*');
            }
         }
      } while (cki.Key != ConsoleKey.Enter & password.Length < 15);

      // Make the password read-only to prevent modification.
      password.MakeReadOnly();
      // Dispose of the SecureString instance.
      password.Dispose();
   }
}
// This example displays output like the following:
//    Enter your password (up to 15 letters, numbers, and underscores)
//    Press BACKSPACE to delete the last character entered.
//    Press Enter when done, or ESCAPE to quit:
//    ************
Imports System.Security

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      Dim m As String = vbCrLf & "Enter your password (up to 15 letters, numbers, and underscores)" &
                        vbCrLf & "Press BACKSPACE to delete the last character entered. " & vbCrLf &
                        "Press Enter when done, or ESCAPE to quit: "
      Dim password As New SecureString()
      Dim top, left As Integer

      ' The Console.TreatControlCAsInput property prevents CTRL+C from
      ' ending this example.
      Console.TreatControlCAsInput = True

      Console.Clear()
      Console.WriteLine(m)

      top = Console.CursorTop
      left = Console.CursorLeft

      ' Read user input from the console. Store up to 15 letter, digit, or underscore
      ' characters in a SecureString object, or delete a character if the user enters 
      ' a backspace. Display an asterisk (*) on the console to represent each character 
      ' that is stored.
      
      Do
         cki = Console.ReadKey(True)
         If cki.Key = ConsoleKey.Escape Then Exit Do

         If cki.Key = ConsoleKey.Backspace Then
            If password.Length > 0 Then
               Console.SetCursorPosition(left + password.Length - 1, top)
               Console.Write(" "c)
               Console.SetCursorPosition(left + password.Length - 1, top)
               password.RemoveAt(password.Length - 1)
            End If
         Else
            If password.Length < 15 AndAlso([Char].IsLetterOrDigit(cki.KeyChar) _
            OrElse cki.KeyChar = "_"c) Then
               password.AppendChar(cki.KeyChar)
               Console.SetCursorPosition(left + password.Length - 1, top)
               Console.Write("*"c)
            End If
         End If
      Loop While cki.Key <> ConsoleKey.Enter And password.Length < 15

      ' Make the password read-only to prevent modification.
      password.MakeReadOnly()
      ' Dispose of the SecureString instance.
      password.Dispose()
   End Sub
End Class
' The example displays output like the following:
'    Enter your password (up to 15 letters, numbers, and underscores)
'    Press BACKSPACE to delete the last character entered.
'    Press Enter when done, or ESCAPE to quit:
'    ************

Comentarios

El índice es de base cero; el primer carácter de esta instancia se encuentra en la posición de índice cero.The index is zero-based; the first character in this instance is at index position zero.

Si la implementación utiliza un mecanismo de protección, como el cifrado, el valor de esta cadena segura, si existe, no está protegido; se quita el carácter que se encuentra en la posición de índice especificada; después, el nuevo valor se vuelve a proteger.If the implementation uses a protection mechanism, such as encryption, the value of this secure string, if any, is unprotected; the character at the specified index position is removed; then the new value is re-protected.

Se aplica a