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