Chr*_*eis 6 c# generics reflection types
我有几个模板化的对象都实现了相同的接口:
IE
MyObject<datatype1> obj1;
MyObject<datatype2> obj2;
MyObject<datatype3> obj3;
我想将这些对象存储在List中...我想我会这样做:
private List<MyObject<object>> _myList;
然后我想创建一个函数,它接受1个参数,作为数据类型,以查看我的列表中是否存在使用该数据类型的对象.... sorta无能为力.在伪代码中它将是:
public bool Exist(DataType T)
{
   return (does _myList contain a MyObject<T>?);
}
一些澄清....
我的界面是IMyObject<T>,我的对象是MyObject<T>.我有一个新类MyObjectManager,我需要有一个MyObject<T>存储在其中的列表.我需要一个函数来检查MyObject<T>该列表中是否存在.类型T是使用T4 ....我的实体数据模型中的POCO类自动生成的数据类型.
您可以创建一个通用函数:
public bool Exists<T>() where T : class {
    return _myList.OfType<MyObject<T>>().Any();
}
请注意,这需要您T在编译时知道.
如果您拥有的只是System.Type运行时的对象,则需要使用反射:
public bool Exists(Type t) {
    var objectOfT = typeof(MyObject<>).MakeGenericType(t);
    return _myList.Any(o => o.GetType() == objectOfT);
}
但请注意,a List<MyObject<object>> 不能容纳MyObject<SomeType>.
您需要将列表更改为a List<object>,或者生成MyObject实现或继承非泛型类型,并使列表包含该类型.