C# 检查对象列表中是否有任何相同类型的对象?
我有一个从类型派生的对象列表(X和Y从A派生)C# 检查对象列表中是否有任何相同类型的对象?,c#,list,object,types,equality,C#,List,Object,Types,Equality,我有一个从类型派生的对象列表(X和Y从A派生) List List=新列表() { 新的X(), 新的Y(), }; 我有一个从类型派生的对象。Z对象 我想检查类型是否相等,如果列表对象类型中有与Z对象相同的类型 我如何才能像这样编写代码?您只需按照建议的副本编写即可: bool containsOfTypeZ = list.OfType<Z>().Any(); 那么X,Y,Z是从A推导出来的?你想检查Z对象是否在a的列表中?类型Z是在编译时固定的还是在运行时动态确定的?还有一个
List List=新列表()
{
新的X(),
新的Y(),
};
我有一个从类型派生的对象。Z对象
我想检查类型是否相等,如果列表对象类型中有与Z对象相同的类型
我如何才能像这样编写代码?您只需按照建议的副本编写即可:
bool containsOfTypeZ = list.OfType<Z>().Any();
那么X,Y,Z是从A推导出来的?你想检查Z对象是否在a的列表中?类型Z是在编译时固定的还是在运行时动态确定的?还有一个问题:类型必须精确匹配还是派生类型可以?示例:如果列表包含从Z派生的ZZ类型的对象,它是否匹配?@KlausGütter可以在运行时确定。顺便说一下,我的对象类型不支持任何接口,如IEnumerable等。@KlausGütter我的类型是否必须完全匹配-->是。
FirstOrDefault()!=null
可以简化为Any()
不需要使用where或类型Z的实例,您只需使用如下列表中的linq即可;或者list.Any(a=>a是Z)
,如果您也需要查找从Z
派生的任何内容,这将很有帮助。顺便说一下,我的对象类型不支持任何接口,比如IEnumerableetc@thepasserby没关系。。。我们对列表
实例进行操作Z
可以是任何class
类型,甚至struct
和enum
或delegate
等。因此Linq扩展方法作用于IEnumerable
。
bool containsOfTypeZ = list.OfType<Z>().Any();
var someType = someInstance.GetType();
bool containsOfSomeRuntimeType = list.Any(o => o.GetType() == someType);