gpt4 book ai didi

C# 确定泛型类型

转载 作者:太空狗 更新时间:2023-10-29 21:30:59 25 4
gpt4 key购买 nike

我有几个模板化对象,它们都实现了相同的接口(interface):

即.

MyObject<datatype1> obj1;
MyObject<datatype2> obj2;
MyObject<datatype3> obj3;

我想将这些对象存储在一个列表中...我想我会这样做:

private List<MyObject<object>> _myList;

然后我想创建一个带有 1 个参数(作为数据类型)的函数,以查看使用该数据类型的对象是否存在于我的列表中……有点不知如何去做。在伪代码中它将是:

public bool Exist(DataType T)
{
return (does _myList contain a MyObject<T>?);
}

一些澄清....

我的界面是IMyObject<T> , 我的对象是 MyObject<T> .我有一个新类(class) MyObjectManager我需要一个 MyObject<T> 的列表存于内。我需要一个函数来检查是否 MyObject<T>存在于该列表中。类型T是使用 T4 自动生成的数据类型....来 self 的实体数据模型的 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);
}

但是请注意,List<MyObject<object>> 不能持有 MyObject<SomeType> .
您需要将列表更改为 List<object> , 或制作 MyObject实现或继承非泛型类型并使列表包含该类型。

关于C# 确定泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2923421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com