Jam*_*rgy 6 c# generics reflection interface
我想测试一个对象,以确定它实现了IDictionary<TKey,TValue>
,但我不在乎什么TKey
和TValue
有.
我可以测试是否是Dictionary<,>
这样的框架的具体实例:
bool isDict = type.IsGenericType &&
(typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
Run Code Online (Sandbox Code Playgroud)
但我想不出一种方法来测试实现的东西IDictionary<,>
.这种技术不适用于界面; IsAssignableFrom
如果我测试泛型基类型IDictionary<,>
,则返回false ,这看起来很奇怪,因为它适用于具体类型.
通常你会is
用来测试某些东西是否实现了一个接口,当然这只有在我想测试一个特定的通用接口时才有用.或者我只是测试一个共同的祖先接口,但与其他通用数据结构(如IList<>
和)不同ICollection<>
,没有通用IDictionary<TKey,TValue>
继承的唯一非泛型接口.
jas*_*son 10
怎么样的
return type.GetInterfaces()
.Where(t => t.IsGenericType)
.Select(t => t.GetGenericTypeDefinition())
.Any(t => t.Equals(typeof(IDictionary<,>)));
Run Code Online (Sandbox Code Playgroud)
我相信你可以很容易地推广任何泛型类型定义.
归档时间: |
|
查看次数: |
1484 次 |
最近记录: |