检查对象列表中是否有任何相同类型的对象?[复制]

Checking is there any same type object inside of the object list? [duplicate]

提问人:thepasserby 提问时间:9/13/2020 更新时间:9/13/2020 访问量:58

问:

我有一个从 A 类型派生的对象列表(X 和 Y 派生自 A)

List<A> list = new List<A>()
{
   new X(),
   new Y(),
};

我有一个派生自 A 类型的对象。Z 对象

我想检查类型是否相等,如果列表对象类型中存在与 Z 对象相同的类型 我怎样才能写出这样的代码?

C# 列出 对象 类型 相等

评论

0赞 nalnpir 9/13/2020
所以 X、Y、Z 是从 A 派生而来的?并且您想检查 Z 对象是否在该 A 列表中?
1赞 Klaus Gütter 9/13/2020
Z 类型是在编译时固定的,还是在运行时动态确定的?
1赞 Klaus Gütter 9/13/2020
还有一个问题:类型是否必须完全匹配,或者派生类型是否正常?示例:如果列表包含派生自 Z 的 ZZ 类型的对象,它是否匹配?
0赞 thepasserby 9/13/2020
@KlausGütter它可以在运行时确定。顺便说一句,我的对象类型不支持任何接口,如 IEnumerable 等。
0赞 thepasserby 9/13/2020
@KlausGütter我的类型必须完全匹配 - >是的。

答:

0赞 user12031933 9/13/2020 #1

您可以简单地编写为建议的副本:

bool containsOfTypeZ = list.OfType<Z>().Any();

或者正如@KlausGütter所想的那样:

var someType = someInstance.GetType();
bool containsOfSomeRuntimeType = list.Any(o => o.GetType() == someType);

评论

1赞 Klaus Gütter 9/13/2020
FirstOrDefault() != null可以简化为Any()
2赞 nalnpir 9/13/2020
无需使用 where 或 Z 类型的实例,您可以简单地使用像 this list 这样的 linq。任意(x => x.GetType() == typeof(Z));
2赞 Jon Skeet 9/13/2020
或者,如果您需要查找任何派生自的内容,这将有所帮助。list.Any(a => a is Z)Z
0赞 thepasserby 9/13/2020
顺便说一句,我的对象类型不支持任何接口,如IEnumerable等
0赞 9/13/2020
@thepasserby 没关系......我们对实例采取行动。 可以是任何类型,偶数和或等。因此,Linq 扩展方法作用于 .List<>ZclassstructenumdelegateIEnumerable<Z>