C#确定泛型类型

Chr*_*eis 6 c# generics reflection types

我有几个模板化的对象都实现了相同的接口:

IE

MyObject<datatype1> obj1;
MyObject<datatype2> obj2;
MyObject<datatype3> obj3;
Run Code Online (Sandbox Code Playgroud)

我想将这些对象存储在List中...我想我会这样做:

private List<MyObject<object>> _myList;
Run Code Online (Sandbox Code Playgroud)

然后我想创建一个函数,它接受1个参数,作为数据类型,以查看我的列表中是否存在使用该数据类型的对象.... sorta无能为力.在伪代码中它将是:

public bool Exist(DataType T)
{
   return (does _myList contain a MyObject<T>?);
}
Run Code Online (Sandbox Code Playgroud)

一些澄清....

我的界面是IMyObject<T>,我的对象是MyObject<T>.我有一个新类MyObjectManager,我需要有一个MyObject<T>存储在其中的列表.我需要一个函数来检查MyObject<T>该列表中是否存在.类型T是使用T4 ....我的实体数据模型中的POCO类自动生成的数据类型.

SLa*_*aks 6

您可以创建一个通用函数:

public bool Exists<T>() where T : class {
    return _myList.OfType<MyObject<T>>().Any();
}
Run Code Online (Sandbox Code Playgroud)

请注意,这需要您T在编译时知道.

如果您拥有的只是System.Type运行时的对象,则需要使用反射:

public bool Exists(Type t) {
    var objectOfT = typeof(MyObject<>).MakeGenericType(t);

    return _myList.Any(o => o.GetType() == objectOfT);
}
Run Code Online (Sandbox Code Playgroud)

但请注意,a List<MyObject<object>> 不能容纳MyObject<SomeType>.
您需要将列表更改为a List<object>,或者生成MyObject实现或继承非泛型类型,并使列表包含该类型.