C# 使用LINQ在IList中查找项
我有一个IList:C# 使用LINQ在IList中查找项,c#,.net,linq,list,C#,.net,Linq,List,我有一个IList: IList list = CallMyMethodToGetIList(); 我不知道我能得到的类型 Type entityType = list[0].GetType();` 我想用LINQ搜索此列表,例如: var itemFind = list.SingleOrDefault(MyCondition....); 谢谢你的帮助 IList列表=。。。 IList list = ... // if all items are of given type IEnum
IList list = CallMyMethodToGetIList();
我不知道我能得到的类型
Type entityType = list[0].GetType();`
我想用LINQ搜索此列表,例如:
var itemFind = list.SingleOrDefault(MyCondition....);
谢谢你的帮助 IList列表=。。。
IList list = ...
// if all items are of given type
IEnumerable<YourType> seq = list.Cast<YourType>().Where(condition);
// if only some of them
IEnumerable<YourType> seq = list.OfType<YourType>().Where(condition);
//如果所有项目均为给定类型
IEnumerable seq=list.Cast()。其中(条件);
//要是他们中的一些人就好了
IEnumerable seq=list.OfType(),其中(条件);
简单:
IList list = MyIListMethod();
var item = list
.Cast<object>()
.SingleOrDefault(i => i is MyType);
IList list=MyIListMethod();
变量项=列表
.Cast()
.SingleOrDefault(i=>i是MyType);
或:
IList list=MyIListMethod();
变量项=列表
.Cast()
.SingleOrDefault(i=>i!=null);
希望这有帮助 如果您不知道类型,您的情况会是什么样子?因为您使用的是非通用的
IList
,所以在使用其他LINQ方法之前,您需要添加.OfType
或.Cast
。如果您的项目不属于同一类型,您只需将对象
用作t
即可,即.OfType()
如果您知道该类型派生自接口,请转换到接口并使用接口方法。如果您知道该类型实现了一个特定的方法,请尝试使用dynamic。@lazyberezovsky编写这样的条件并不难,它只是简单地提出了一个有用的条件,可能很容易,也可能不容易。例如,任何类型都有一个ToString
,您可以确定obj.ToString()
是否为空。您知道SingleOrDefault
在找到多个项时会引发异常,是吗?在这种情况下,“单身”并不意味着“只给我一个”。如果您打算“只给我一个”,那么使用FirstOrDefault
和提供的答案。OfType()
将为您完成此操作。基本上是foreach(item)yield return(T)item
和foreach(item)If(item is T)分别以T
的形式生成返回项。如果该类型是不可为空的值类型,该怎么办?.SingleOrDefault(xxx)
中的筛选器仅为示例。我指的是.Cast()
方法。。。但是你的问题很有趣!给我几分钟时间……最简单的方法是使用泛型方法,如下所示:我觉得在编译时不知道类型,因为他使用了list[0].GetType()
来获取类型。我同意您在我的回答中的评论,动态
不是很有效,但它支持Linq。
IList list = MyIListMethod();
var item = list
.Cast<object>()
.SingleOrDefault(i => i != null);