StringDictionary 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使用字符串(而不是对象)强类型的键和值来实现哈希表。
public ref class StringDictionary : System::Collections::IEnumerable
public class StringDictionary : System.Collections.IEnumerable
[System.Serializable]
public class StringDictionary : System.Collections.IEnumerable
type StringDictionary = class
interface IEnumerable
[<System.Serializable>]
type StringDictionary = class
interface IEnumerable
Public Class StringDictionary
Implements IEnumerable
- 继承
-
StringDictionary
- 属性
- 实现
示例
下面的代码示例演示 的几个属性和方法 StringDictionary。
#using <System.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Collections::Specialized;
void PrintKeysAndValues2( StringDictionary^ myCol );
void PrintKeysAndValues3( StringDictionary^ myCol );
int main()
{
// Creates and initializes a new StringDictionary.
StringDictionary^ myCol = gcnew StringDictionary;
myCol->Add( "red", "rojo" );
myCol->Add( "green", "verde" );
myCol->Add( "blue", "azul" );
// Display the contents of the collection using the enumerator.
Console::WriteLine( "Displays the elements using the IEnumerator:" );
PrintKeysAndValues2( myCol );
// Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console::WriteLine( "Displays the elements using the Keys, Values, Count, and Item properties:" );
PrintKeysAndValues3( myCol );
// Copies the StringDictionary to an array with DictionaryEntry elements.
array<DictionaryEntry>^myArr = gcnew array<DictionaryEntry>(myCol->Count);
myCol->CopyTo( myArr, 0 );
// Displays the values in the array.
Console::WriteLine( "Displays the elements in the array:" );
Console::WriteLine( " KEY VALUE" );
for ( int i = 0; i < myArr->Length; i++ )
Console::WriteLine( " {0,-10} {1}", myArr[ i ].Key, myArr[ i ].Value );
Console::WriteLine();
// Searches for a value.
if ( myCol->ContainsValue( "amarillo" ) )
Console::WriteLine( "The collection contains the value \"amarillo\"." );
else
Console::WriteLine( "The collection does not contain the value \"amarillo\"." );
Console::WriteLine();
// Searches for a key and deletes it.
if ( myCol->ContainsKey( "green" ) )
myCol->Remove( "green" );
Console::WriteLine( "The collection contains the following elements after removing \"green\":" );
PrintKeysAndValues2( myCol );
// Clears the entire collection.
myCol->Clear();
Console::WriteLine( "The collection contains the following elements after it is cleared:" );
PrintKeysAndValues2( myCol );
}
// Uses the enumerator.
void PrintKeysAndValues2( StringDictionary^ myCol )
{
IEnumerator^ myEnumerator = myCol->GetEnumerator();
DictionaryEntry de;
Console::WriteLine( " KEY VALUE" );
while ( myEnumerator->MoveNext() )
{
de = *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
Console::WriteLine( " {0,-25} {1}", de.Key, de.Value );
}
Console::WriteLine();
}
// Uses the Keys, Values, Count, and Item properties.
void PrintKeysAndValues3( StringDictionary^ myCol )
{
array<String^>^myKeys = gcnew array<String^>(myCol->Count);
myCol->Keys->CopyTo( myKeys, 0 );
Console::WriteLine( " INDEX KEY VALUE" );
for ( int i = 0; i < myCol->Count; i++ )
Console::WriteLine( " {0,-5} {1,-25} {2}", i, myKeys[ i ], myCol[ myKeys[ i ] ] );
Console::WriteLine();
}
/*
This code produces the following output.
Displays the elements using the IEnumerator:
KEY VALUE
red rojo
blue azul
green verde
Displays the elements using the Keys, Values, Count, and Item properties:
INDEX KEY VALUE
0 red rojo
1 blue azul
2 green verde
Displays the elements in the array:
KEY VALUE
red rojo
blue azul
green verde
The collection does not contain the value "amarillo".
The collection contains the following elements after removing "green":
KEY VALUE
red rojo
blue azul
The collection contains the following elements after it is cleared:
KEY VALUE
*/
using System;
using System.Collections;
using System.Collections.Specialized;
public class SamplesStringDictionary {
public static void Main() {
// Creates and initializes a new StringDictionary.
StringDictionary myCol = new StringDictionary();
myCol.Add( "red", "rojo" );
myCol.Add( "green", "verde" );
myCol.Add( "blue", "azul" );
// Display the contents of the collection using foreach. This is the preferred method.
Console.WriteLine( "Displays the elements using foreach:" );
PrintKeysAndValues1( myCol );
// Display the contents of the collection using the enumerator.
Console.WriteLine( "Displays the elements using the IEnumerator:" );
PrintKeysAndValues2( myCol );
// Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console.WriteLine( "Displays the elements using the Keys, Values, Count, and Item properties:" );
PrintKeysAndValues3( myCol );
// Copies the StringDictionary to an array with DictionaryEntry elements.
DictionaryEntry[] myArr = new DictionaryEntry[myCol.Count];
myCol.CopyTo( myArr, 0 );
// Displays the values in the array.
Console.WriteLine( "Displays the elements in the array:" );
Console.WriteLine( " KEY VALUE" );
for ( int i = 0; i < myArr.Length; i++ )
Console.WriteLine( " {0,-10} {1}", myArr[i].Key, myArr[i].Value );
Console.WriteLine();
// Searches for a value.
if ( myCol.ContainsValue( "amarillo" ) )
Console.WriteLine( "The collection contains the value \"amarillo\"." );
else
Console.WriteLine( "The collection does not contain the value \"amarillo\"." );
Console.WriteLine();
// Searches for a key and deletes it.
if ( myCol.ContainsKey( "green" ) )
myCol.Remove( "green" );
Console.WriteLine( "The collection contains the following elements after removing \"green\":" );
PrintKeysAndValues1( myCol );
// Clears the entire collection.
myCol.Clear();
Console.WriteLine( "The collection contains the following elements after it is cleared:" );
PrintKeysAndValues1( myCol );
}
// Uses the foreach statement which hides the complexity of the enumerator.
// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
public static void PrintKeysAndValues1( StringDictionary myCol ) {
Console.WriteLine( " KEY VALUE" );
foreach ( DictionaryEntry de in myCol )
Console.WriteLine( " {0,-25} {1}", de.Key, de.Value );
Console.WriteLine();
}
// Uses the enumerator.
// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
public static void PrintKeysAndValues2( StringDictionary myCol ) {
IEnumerator myEnumerator = myCol.GetEnumerator();
DictionaryEntry de;
Console.WriteLine( " KEY VALUE" );
while ( myEnumerator.MoveNext() ) {
de = (DictionaryEntry) myEnumerator.Current;
Console.WriteLine( " {0,-25} {1}", de.Key, de.Value );
}
Console.WriteLine();
}
// Uses the Keys, Values, Count, and Item properties.
public static void PrintKeysAndValues3( StringDictionary myCol ) {
String[] myKeys = new String[myCol.Count];
myCol.Keys.CopyTo( myKeys, 0 );
Console.WriteLine( " INDEX KEY VALUE" );
for ( int i = 0; i < myCol.Count; i++ )
Console.WriteLine( " {0,-5} {1,-25} {2}", i, myKeys[i], myCol[myKeys[i]] );
Console.WriteLine();
}
}
/*
This code produces the following output.
Displays the elements using foreach:
KEY VALUE
red rojo
blue azul
green verde
Displays the elements using the IEnumerator:
KEY VALUE
red rojo
blue azul
green verde
Displays the elements using the Keys, Values, Count, and Item properties:
INDEX KEY VALUE
0 red rojo
1 blue azul
2 green verde
Displays the elements in the array:
KEY VALUE
red rojo
blue azul
green verde
The collection does not contain the value "amarillo".
The collection contains the following elements after removing "green":
KEY VALUE
red rojo
blue azul
The collection contains the following elements after it is cleared:
KEY VALUE
*/
Imports System.Collections
Imports System.Collections.Specialized
Public Class SamplesStringDictionary
Public Shared Sub Main()
' Creates and initializes a new StringDictionary.
Dim myCol As New StringDictionary()
myCol.Add("red", "rojo")
myCol.Add("green", "verde")
myCol.Add("blue", "azul")
' Display the contents of the collection using For Each. This is the preferred method.
Console.WriteLine("Displays the elements using For Each:")
PrintKeysAndValues1(myCol)
' Display the contents of the collection using the enumerator.
Console.WriteLine("Displays the elements using the IEnumerator:")
PrintKeysAndValues2(myCol)
' Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console.WriteLine("Displays the elements using the Keys, Values, Count, and Item properties:")
PrintKeysAndValues3(myCol)
' Copies the StringDictionary to an array with DictionaryEntry elements.
Dim myArr(myCol.Count) As DictionaryEntry
myCol.CopyTo(myArr, 0)
' Displays the values in the array.
Console.WriteLine("Displays the elements in the array:")
Console.WriteLine(" KEY VALUE")
Dim i As Integer
For i = 0 To myArr.Length - 1
Console.WriteLine(" {0,-10} {1}", myArr(i).Key, myArr(i).Value)
Next i
Console.WriteLine()
' Searches for a value.
If myCol.ContainsValue("amarillo") Then
Console.WriteLine("The collection contains the value ""amarillo"".")
Else
Console.WriteLine("The collection does not contain the value ""amarillo"".")
End If
Console.WriteLine()
' Searches for a key and deletes it.
If myCol.ContainsKey("green") Then
myCol.Remove("green")
End If
Console.WriteLine("The collection contains the following elements after removing ""green"":")
PrintKeysAndValues1(myCol)
' Clears the entire collection.
myCol.Clear()
Console.WriteLine("The collection contains the following elements after it is cleared:")
PrintKeysAndValues1(myCol)
End Sub
' Uses the For Each statement which hides the complexity of the enumerator.
' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
Public Shared Sub PrintKeysAndValues1(myCol As StringDictionary)
Console.WriteLine(" KEY VALUE")
Dim de As DictionaryEntry
For Each de In myCol
Console.WriteLine(" {0,-25} {1}", de.Key, de.Value)
Next de
Console.WriteLine()
End Sub
' Uses the enumerator.
' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
Public Shared Sub PrintKeysAndValues2(myCol As StringDictionary)
Dim myEnumerator As IEnumerator = myCol.GetEnumerator()
Dim de As DictionaryEntry
Console.WriteLine(" KEY VALUE")
While myEnumerator.MoveNext()
de = CType(myEnumerator.Current, DictionaryEntry)
Console.WriteLine(" {0,-25} {1}", de.Key, de.Value)
End While
Console.WriteLine()
End Sub
' Uses the Keys, Values, Count, and Item properties.
Public Shared Sub PrintKeysAndValues3(myCol As StringDictionary)
Dim myKeys(myCol.Count) As String
myCol.Keys.CopyTo(myKeys, 0)
Console.WriteLine(" INDEX KEY VALUE")
Dim i As Integer
For i = 0 To myCol.Count - 1
Console.WriteLine(" {0,-5} {1,-25} {2}", i, myKeys(i), myCol(myKeys(i)))
Next i
Console.WriteLine()
End Sub
End Class
'This code produces the following output.
'
'Displays the elements using For Each:
' KEY VALUE
' red rojo
' blue azul
' green verde
'
'Displays the elements using the IEnumerator:
' KEY VALUE
' red rojo
' blue azul
' green verde
'
'Displays the elements using the Keys, Values, Count, and Item properties:
' INDEX KEY VALUE
' 0 red rojo
' 1 blue azul
' 2 green verde
'
'Displays the elements in the array:
' KEY VALUE
' red rojo
' blue azul
' green verde
'
'
'The collection does not contain the value "amarillo".
'
'The collection contains the following elements after removing "green":
' KEY VALUE
' red rojo
' blue azul
'
'The collection contains the following elements after it is cleared:
' KEY VALUE
注解
键不能是 null
,但值可以是 。
以不区分大小写的方式处理密钥;在与字符串字典一起使用之前,它将被转换为小写。
在 .NET Framework 版本 1.0 中,此类使用区分区域性的字符串比较。 但是,在 .NET Framework 版本 1.1 及更高版本中,此类在比较字符串时使用 CultureInfo.InvariantCulture 。 有关区域性如何影响比较和排序的详细信息,请参阅 执行 Culture-Insensitive 字符串操作。
构造函数
StringDictionary() |
初始化 StringDictionary 类的新实例。 |
属性
Count |
获取 StringDictionary 中的键/值对的数目。 |
IsSynchronized |
获取一个值,该值指示是否同步对 StringDictionary 的访问(线程安全)。 |
Item[String] |
获取或设置与指定的键关联的值。 |
Keys |
获取 StringDictionary 中键的集合。 |
SyncRoot |
获取可用于同步对 StringDictionary 的访问的对象。 |
Values |
获取 StringDictionary 中值的集合。 |
方法
Add(String, String) |
将带有指定键和值的条目添加到 StringDictionary 中。 |
Clear() |
从 StringDictionary 中移除所有项。 |
ContainsKey(String) |
确定 StringDictionary 是否包含特定键。 |
ContainsValue(String) |
确定 StringDictionary 是否包含特定值。 |
CopyTo(Array, Int32) |
将字符串字典值复制到一维 Array 实例的指定索引位置。 |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetEnumerator() |
返回循环访问字符串字典的枚举数。 |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
Remove(String) |
从字符串字典中移除带有指定键的条目。 |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |
扩展方法
Cast<TResult>(IEnumerable) |
将 IEnumerable 的元素强制转换为指定的类型。 |
OfType<TResult>(IEnumerable) |
根据指定类型筛选 IEnumerable 的元素。 |
AsParallel(IEnumerable) |
启用查询的并行化。 |
AsQueryable(IEnumerable) |
将 IEnumerable 转换为 IQueryable。 |
适用于
线程安全性
Visual Basic 中的公共静态 (Shared
) 此类型的成员是线程安全的。 但不保证所有实例成员都是线程安全的。
此实现不会为 StringDictionary提供同步 (线程安全) 包装器,但派生类可以使用 属性创建自己的同步版本的 StringDictionarySyncRoot 。
枚举整个集合本质上不是一个线程安全的过程。 即使某个集合已同步,其他线程仍可以修改该集合,这会导致枚举数引发异常。 若要确保枚举过程中的线程安全性,可以在整个枚举期间锁定集合,或者捕获由其他线程进行的更改所导致的异常。