3

我想知道如何在运行时获取非泛型 IDictionary 的键和值类型。

对于泛型 IDictionary,我们可以使用反射来获取泛型参数,此处已回答。

但是对于非泛型 IDictionary,例如 HybridDictionary,如何获取键和值类型?

编辑:我可能无法正确描述我的问题。对于非泛型 IDictionary,如果我有 HyBridDictionary,它被声明为

HyBridDictionary dict = new HyBridDictionary();

dict.Add("foo" , 1);
dict.Add("bar", 2);

如何找出键的类型是字符串,值的类型是 int?

4

3 回答 3

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();
   }
于 2012-07-09T02:59:45.097 回答
1

尝试这个:

foreach (DictionaryEntry de in GetTheDictionary())
{
    Console.WriteLine("Key type" + de.Key.GetType());
    Console.WriteLine("Value type" + de.Value.GetType());
}
于 2012-07-09T03:03:09.700 回答
1

非泛型字典不一定具有与泛型字典相同的键或值类型。它们可以将任何类型作为键,将任何类型作为值。

考虑一下:

var dict = new System.Collections.Specialized.HybridDictionary();

dict.Add(1, "thing");
dict.Add("thing", 3);

它有多种类型的键和多种类型的值。那么,你会说钥匙是什么类型的呢?

您可以找出每个单独的键和单独的值的类型,但不能保证它们都是相同的类型。

于 2012-07-09T03:03:44.547 回答