2

我有这门课

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

4

1 回答 1

7

由于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 )。

itemtype 是一个类,因此默认值为null.

您正在使用SelectafterWhere子句,它基本上是过滤后的投影。它接受一个类型序列A并返回一个类型序列B。您需要折叠一个序列,换句话说,要找到一个符合某些条件的项目。LINQ 中有很多折叠查询(First, Single, Max, Last, Aggregate, 等),它们都A从 type 序列中返回一个 type项AFirstOrDefault似乎很适合您当前的 C# 实现。

于 2013-11-13T04:29:40.943 回答