【发布时间】:2013-02-23 05:58:14
【问题描述】:
我有一个 IList:
IList list = CallMyMethodToGetIList();
我不知道我能得到它的类型
Type entityType = list[0].GetType();`
我想用 LINQ 搜索这个列表:
var itemFind = list.SingleOrDefault(MyCondition....);
感谢您的帮助。
【问题讨论】:
-
如果您不知道类型,您的病情会是什么样子?
-
由于您使用的是非泛型
IList,因此您需要在使用其他LINQ 方法之前添加.OfType<T>或.Cast<T>。如果您的项目不属于同一类型,您可以简单地将object用作T,即.OfType<object>() -
如果您知道该类型派生自接口,请强制转换为该接口并使用接口方法。如果您知道该类型实现了特定方法,请尝试使用 dynamic。
-
@lazyberezovsky 写这样一个条件并不难,它只是想出一个有用的条件,可能容易也可能不容易。例如,任何类型都会有一个
ToString,你可以判断obj.ToString()是否为null。 -
您知道
SingleOrDefault会在找到多个项目时抛出异常,是吗?在这种情况下,“单身”并不意味着“只给我一个”。如果您打算“只给我一个”,那么在提供的答案中使用FirstOrDefault。