相关疑难解决方法(0)

有没有办法确定泛型类型是否是从特定的泛型类型定义构建的?

我有一个通用的方法:

Func<IEnumerable<T>, bool> CreateFunction<T>()
Run Code Online (Sandbox Code Playgroud)

哪里T可以是任何数量的不同类型.这个方法使用反射做一堆东西,如果T是的话IDictionary,不管字典是什么TKey,TValue我需要执行字典特定的代码.

所以可以调用该方法:

var f = CreateFunction<string>();
var f0 = CreateFunction<SomePocoType>();
var f1 = CreateFunction<IDictionary<string,object>>();
var f2 = CreateFunction<Dictionary<string,object>>();
var f3 = CreateFunction<SomeDerivedDictionaryType<string,object>>();
Run Code Online (Sandbox Code Playgroud)

等等

根据@Andy的答案澄清

最终我想知道是否T从/ implements继承,IDictionary即使它T本身是Dictionary或从该接口派生的其他类型.

if(typeof(T) == typeof(IDictionary<,>)
Run Code Online (Sandbox Code Playgroud)

不起作用,因为T泛型类型不是泛型类型定义.

并且在不知道TKeyTValue(在编译时不知道)的情况下,我不能对运行时我知道的任何具体类型进行比较.

我唯一想到的就是查看类型的名称或者用反射检查它的方法,寻找能让我相信它是字典的方法(即寻找ContainsKeyget_Item).

有没有直接的方法来做出这种决定?

c# generics reflection types

4
推荐指数
1
解决办法
1685
查看次数

标签 统计

c# ×1

generics ×1

reflection ×1

types ×1