让我们有函数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再次“任何”支持的类型)?
答案 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);
}
}
通过这种方式,您可以ProcessKey
和ProcessVal
期待对象。