Dictionary<int, string> numbers = new Dictionary<int, string>();
Console.WriteLine(((IDictionary)numbers).IsReadOnly);
Console.WriteLine(((IDictionary)numbers).IsFixedSize);
Console.WriteLine(((IDictionary)numbers).IsSynchronized);
Console.WriteLine(((IDictionary)numbers).SyncRoot);
注意,由於缺少返回一個泛型字典同步版本的代碼,IsSynchronized屬性將總是返回false。SyncRoot屬性在被調用時總是返回相同的對象。實際上這個屬性返回的是this指針。微軟已經決定移除泛型集合類的創建同步包裝的功能。
做為替代,他們推薦使用lock關鍵字鎖住整個集合或其他同步對象類型以滿足您的需求。
因為在泛型字典類中也缺少了克隆方法(實際是是因為這個類沒有實現ICloneable接口),您可以轉而使用重載的構造方法來接收一個IDictionary<T,U>類型:
// 創建並填充字典.
Dictionary<int, string> numbers = new Dictionary<int, string>();
numbers.Add(1, "one");
numbers.Add(2, "two");
// 顯示原字典的鍵/值對.
foreach (KeyValuePair<int, string> kvp in numbers)
{
Console.WriteLine("Original Key: " + kvp.Key + "\tValue: " + kvp.Value);
}
// 克隆字典對象.
Dictionary<int, string> clonedNumbers = new Dictionary<int, string>(numbers);
// 顯示克隆字典中的鍵/值對.
foreach (KeyValuePair<int, string> kvp in numbers)
{
Console.WriteLine("Cloned Key: " + kvp.Key + "\tValue: " + kvp.Value);
}
還有兩個Dictionary類中缺少的方法:Contains和CopyTo方法。Contains方法的功能在Dictionary類中很容易被實現。在Hashtable類中,Cintains方法和ContainsKey方法有相同的行為,因此您可以在Dictionary類中簡單地使用ContainsKey方法來模擬Hashtable類中的Contains方法:
// 創建和填充字典.
Dictionary<int, string> numbers = new Dictionary<int, string>();
numbers.Add(1, "one");
numbers.Add(2, "two");
Console.WriteLine("numbers.ContainsKey(1) == " + numbers.ContainsKey(1));
Console.WriteLine("numbers.ContainsKey(3) == " + numbers.ContainsKey(3));
CopyTo方法也很容易在Dictionary類中被模擬,但需要做一些額外的工作:
// 創建和填充字典.
Dictionary<int, string> numbers = new Dictionary<int, string>();
numbers.Add(1, "one");
numbers.Add(2, "two");
// 顯示字典中的所有鍵/值對.
foreach (KeyValuePair<int, string> kvp in numbers)
{
Console.WriteLine("Key: " + kvp.Key + "\tValue: " + kvp.Value);
}
// 創建對象數組來拷貝字典對象中的信息.
KeyValuePair<int, string>[] obJS = new KeyValuePair<int,
string>[numbers.Count];
// 調用字典中的CopyTo方法
// 把字典中的所有鍵/值對對象拷貝到obJS中
((IDictionary)numbers).CopyTo(obJS, 0);
// 顯示obJS[]中的所有鍵/值對.
foreach (KeyValuePair<int, string> kvp in obJS)
{
Console.WriteLine("Key: " + kvp.Key + "\tValue: " + kvp.Value);
}
調用Dictionary對象中的CopyTo方法需要創建一個KeyValuePair<T,U>對象數組,它用於在CopyTo方法被調用之後,控制字典對象中的所有KeyValuePair<T,U>對象。接下來numbers字典對象被轉換為IDictionary類型以調用CopyTo方法。一旦CopyTo方法被調用,objs數組將包含原numbers對象中的所有KeyValuePair<T,U>對象。注意obJS數組迭代時使用了foreach循環,這點和numbers對象是相同的。