使用通用清单,检查是否存在具有特定条件的项目,如果存在,选择它,而不搜索两遍整个列表:在使用前检查通用清单中的项目
例如:
if (list.Exists(item => item == ...))
{
item = list.Find(item => item == ...)
....
}
使用通用清单,检查是否存在具有特定条件的项目,如果存在,选择它,而不搜索两遍整个列表:在使用前检查通用清单中的项目
例如:
if (list.Exists(item => item == ...))
{
item = list.Find(item => item == ...)
....
}
要么使用Find
一次,并将结果与default(T)
比较,或者如果default(T)
可能是项目本身,使用FindIndex
并检查是否指数为-1:
int index = list.FindIndex(x => x...);
if (index != -1)
{
var item = list[index];
// ...
}
如果您使用.NET 3.5或更高版本,它更习惯使用LINQ - 再次,如果default(T)
是没有问题的,你可以使用类似:
var item = list.FirstOrDefault(x => x....);
if (item != null)
{
...
}
使用LINQ可以让你稍后从List<T>
更改为其他集合,而无需更改代码。
你可以这样做只是使用LINQ,只需添加在您的命名空间的顶部使用System.Linq
;
首先,如果你想获得的所有结果:
var items = list.Where(item=>item.Id == giveID).ToList();
或者,如果你只是想第一个结果;
var result = list.FirstOrDefault(item=>item.ID == givenID);
而不是item.Id == givenID
你可以把你自己的标准。例如,如果产品线,你可以做item == "Test"
,或者为int做item == 5
,...
默认情况下,我不会执行'.ToList()'。这给你带来表现利润的机会。 '.ToList()'给你一个找到的项目列表,如果没有,你会得到一个IEnumerator遍历项目。 – Fischermaen
@Fischermaen我不会那样做,但是因为我看到OP对linq不熟悉,并且执行导致模糊不清,我建议这样做,总而言之,您最终应该执行准备好的表达式树,所以不写入列表,它只是使查询并没有得到任何IEnumerable(不要因编译时看到的错误)。你可以在你想要的时候执行它,但是如果你想要的话,应该这样做。它可以通过foreach循环或其他一切来完成 –
item = list.Find(item => item == ...);
if(null != item)
{
//do whatever you want
}
请注意,如果'null'是您可能正在查找的有效值,则这不起作用。它也不适用于'List
是的,谢谢,你说得对。但我不明白你的第二点有什么区别null!= item和item!= null使? –
只要做到这一点。 – dlev
如果item!= null,那么你就是黄金 –