SecureString.RemoveAt(Int32) 方法

定义

从此安全字符串中移除位于指定索引位置的字符。

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

参数

index
Int32

此安全字符串中字符的索引位置。

属性

例外

此安全字符串已释放。

此安全字符串是只读的。

index 小于零,或大于或等于此安全字符串的长度。

保护或取消保护此安全字符串的值时出错。

示例

以下示例演示了对象AppendChar的值、InsertAt方法和ClearRemoveAtSetAt方法。SecureString

using System;
using System.Security;

class SecureStringExample
{
    public static void Main()
    {
       string msg = "The current 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 current length of the SecureString object: 0
//
//       2) Append 'a' to the value.
//       The current length of the SecureString object: 1
//
//       3) Append 'X' to the value.
//       The current length of the SecureString object: 2
//
//       4) Append 'c' to the value.
//       The current length of the SecureString object: 3
//
//       5) Insert 'd' at the end of the value.
//       The current length of the SecureString object: 4
//
//       6) Remove the last character ('d') from the value.
//       The current length of the SecureString object: 3
//
//       7) Set the second character of the value to 'b'.
//       The current length of the SecureString object: 3
//
//       8) Delete the value of the SecureString object:
//       The current length of the SecureString object: 0
Imports System.Security

Module Example
    Public Sub Main()
       Dim msg As String = "The current 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 current length of the SecureString object: 0
'
'       2) Append 'a' to the value.
'       The current length of the SecureString object: 1
'
'       3) Append 'X' to the value.
'       The current length of the SecureString object: 2
'
'       4) Append 'c' to the value.
'       The current length of the SecureString object: 3
'
'       5) Insert 'd' at the end of the value.
'       The current length of the SecureString object: 4
'
'       6) Remove the last character ('d') from the value.
'       The current length of the SecureString object: 3
'
'       7) Set the second character of the value to 'b'.
'       The current length of the SecureString object: 3
'
'       8) Delete the value of the SecureString object:
'       The current length of the SecureString object: 0

以下示例演示如何 AppendChar 使用和 RemoveAt 方法收集密码中的字符。

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 ExampleClass
   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:
'    ************

注解

索引从零开始;此实例中的第一个字符位于索引位置零处。

如果实现使用保护机制(例如加密),则此安全字符串的值(如果有)不受保护;删除位于指定索引位置的字符;然后重新保护新值。

适用于