如果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对我来说很有意义。
你怎么做才能解决这个问题?你最好的做法是什么?
答案 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?