如何访问作为泛型或甚至动态类型传递的字典

时间:2014-11-19 10:25:17

标签: c# generics dynamic dictionary

让我们有函数Process<T>(T data)T可能是“任何”(意味着支持)类型,例如。 int也为Dictionary<U,V>,其中U,V为“任意”类型等。我们可以使用代码检测T字典:

var type = typeof(T); // or data.GetType();

if (   (type.IsGenericType)
    && (type.GetGenericTypeDefinition() == typeof(Dictionary<,>)))
{
    var dict = data as Dictionary<,>; // FIXME: Make dictionary from data

    foreach (kv in dict)
    {
        ProcessKey(kv.Key  );
        ProcessVal(kv.Value);
    }
}

有没有办法将数据解释为字典,或者我们只需要单独的ProcessInt()ProcessDict<T>() where T: Dictionary<U, V>等?

第二级混淆:当函数具有Process(dynamic data)形式时,有没有办法如何访问其类型为Dictionary<U, V>的情况的数据(请注意U,V再次“任何”支持的类型)?

1 个答案:

答案 0 :(得分:1)

您可以使用动态:

  if ((type.IsGenericType) && (type.GetGenericTypeDefinition() == typeof(Dictionary<,>)))
            {
                var dict = data as IDictionary;
                foreach (dynamic entity in dict)
                {
                    object key = entity.Key;
                    object value = entity.Value;


                    ProcessKey(key);
                    ProcessVal(value);
                }
            }

通过这种方式,您可以ProcessKeyProcessVal期待对象。