在运行时获取非泛型IDictionary的键和值类型

时间:2012-07-09 02:55:34

标签: c# types dictionary

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

对于通用IDictionary,我们可以使用反射来获取通用参数,该参数已被回答here

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

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

HyBridDictionary dict = new HyBridDictionary();

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

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

3 个答案:

答案 0 :(得分:2)

从msdn页面:

Msdn Link

 // 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);

它具有多种类型的键和多种类型的值。那么,关键是什么类型呢?

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