我想知道如何在运行时获取非泛型IDictionary的键值和值类型。
对于通用IDictionary,我们可以使用反射来获取通用参数,该参数已被回答here。
但对于非泛型IDictionary,例如HybridDictionary,我如何获得键和值类型?
编辑:我可能无法正确描述我的问题。 对于非泛型IDictionary,如果我有HyBridDictionary,它被声明为
HyBridDictionary dict = new HyBridDictionary();
dict.Add("foo" , 1);
dict.Add("bar", 2);
如何找出键的类型是字符串,值的类型是int?
答案 0 :(得分:2)
从msdn页面:
// 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( IDictionary 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( IDictionary myCol ) {
IDictionaryEnumerator myEnumerator = myCol.GetEnumerator();
Console.WriteLine( " KEY VALUE" );
while ( myEnumerator.MoveNext() )
Console.WriteLine( " {0,-25} {1}", myEnumerator.Key, myEnumerator.Value );
Console.WriteLine();
}
// Uses the Keys, Values, Count, and Item properties.
public static void PrintKeysAndValues3( HybridDictionary 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();
}
答案 1 :(得分:1)
试试这个:
foreach (DictionaryEntry de in GetTheDictionary())
{
Console.WriteLine("Key type" + de.Key.GetType());
Console.WriteLine("Value type" + de.Value.GetType());
}
答案 2 :(得分:1)
非泛型字典不一定具有与通用字典相同的键或值类型。它们可以将任何类型作为键,将任何类型作为值。
考虑一下:
var dict = new System.Collections.Specialized.HybridDictionary();
dict.Add(1, "thing");
dict.Add("thing", 3);
它具有多种类型的键和多种类型的值。那么,关键是什么类型呢?
您可以找出每个键的类型和单个值,但不能保证它们的类型相同。