Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ在IList中查找项_C#_.net_Linq_List - Fatal编程技术网

C# 使用LINQ在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:

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);