0

一般的な辞書は次のとおりです。

public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>

また、特定の辞書は次のようになります。

var container = new ConcurrentDictionary<string, Unit>();
var container = new ConcurrentDictionary<string, CustomUnitClass>();

では、辞書が一般的な辞書タイプであるかどうかを確認するにはどうすればよいですか?

object obj = GetObj(); // obj is some of many dictionaries
if(obj is ?)

前もって感謝します。

4

3 に答える 3

3

すべきではありませんが、何らかの理由で本当に必要な場合は次のとおりです。

if (obj.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)) {
    // It is a Dictionary<TKey, TValue>
}

また

if (obj is ConcurrentDictionary<string, CustomUnitClass>) {
    // It is a ConcurrentDictionary<string, CustomUsnitClass>
}
于 2012-05-30T12:31:41.573 に答える
0
public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>

は「オープン ジェネリック型」であり、オープン ジェネリック型のインスタンスを持つことはできません。

ただし、指定されたオブジェクトがジェネリック型パラメーターを持つ辞書であるかどうかを知りたい場合は、リフレクションを使用してそれを判断できます。

        var d1 = new Dictionary<int, string> ();

        var t = d1.GetType ();

        Console.WriteLine ("Generic? " + t.IsGenericType);
于 2012-05-30T12:34:06.120 に答える
0

辞書を非ジェネリックとして扱うこともできますIDictionary。もちろん、この場合、強い型付けはすべて失われます。

var dictionary = obj as IDictionary;
if (dictionary != null)
{
    ICollection keys = dictionary.Keys;    
    ICollection values = dictionary.Values;
    // work with keys and values as a collection of objects
}
于 2012-05-30T13:25:33.950 に答える