我有这个班级
public class item
{
public int itemID { get; set; }
public int itemValue { get; set; }
}
我有一个变量
public List<item> itemList;
我正在尝试使用lambda在itemList中搜索并找到itemID = i的项目。 通常,没有lamda的函数如下:
public item FindItem(int i)
{
foreach (var t in itemList)
{
if (t.itemID==i)
return t;
}
return null;
}
我尝试用这个lambda替换它
item Item = itemList.Where(x=>x.itemID==i).Select(x=>x);
我收到错误说:
Error 1 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<item>' to 'item'. An explicit conversion exists (are you missing a cast?)
我该如何纠正?我还在学习lambda,Linq
答案 0 :(得分:6)
如果您没有找到任何项目,则返回null
,请使用下一个代码作为等效代码:
public item FindItem(int i)
{
return itemList.FirstOrDefault(item => item.itemId == i);
}
FirstOrDefault
被描述为Returns the first element of a sequence, or a default value if the sequence contains no elements.
(msdn)。
item
类型是一个类,因此默认值为null
。
您在Select
子句之后使用Where
,这基本上是过滤后的投影。它采用类型A
的序列并返回类型B
的序列。您需要折叠序列,换句话说,找到一个符合某些条件的项目。 LINQ中有很多折叠查询(First
,Single
,Max
,Last
,Aggregate
等等,它们都返回一项从类型A
的序列中键入A
。 FirstOrDefault
似乎很适合您当前的C#实现。