Linq表达式崩溃时,它找不到我正在寻找的内容

时间:2017-02-20 19:30:05

标签: c# .net linq

如果i = {1,2}没问题。

如果iId = 3(或其他任何东西),为什么.First()崩溃。

public class C { public int ID, public string nam }
int i = 3;
C c = new List<C>;
c.Add(new C{ID = 1, nam="hello" });
c.Add(new C{ID = 2, nam=world" });
C r = c.First(e => e.ID.Equals(i));

例外是:

  

InvalidOperationException未被用户代码

处理      

序列不包含匹配元素

我认为表达式必须做的至少是返回null。 相反,它崩溃了 这对我来说毫无意义。 返回的null对我来说很有意义。

你怎么做才能解决这个问题?你最好的做法是什么?

2 个答案:

答案 0 :(得分:2)

First(e => e.ID.Equals(i))更改为FirstOrDefault(e => e.ID.Equals(i)),然后您将获得空值(因为default(C)为空,因为这是参考类型的默认值),您可以如何处理你认为合适,而不是让你的应用程序崩溃。

如果您需要更多信息/示例,请点击FirstOrDefault的MDSN链接:
https://msdn.microsoft.com/en-us/library/bb340482(v=vs.110).aspx

答案 1 :(得分:0)

我倾向于同意.First()可能会更加友好,但是你可以通过使用.FirstOrDefault()获得你想要的东西

When to use .First and when to use .FirstOrDefault with LINQ?