在VS2008中,似乎在三元操作中使用Find,FirstOrDefault和类似方法存在很大问题。 给出以下非常基本的例子:
List<MyClass> myList = new List<MyClass>();
myList.Add(new MyClass() { SomeField = "Mr" });
myList.Add(new MyClass() { SomeField = "Mrs" });
myList.Add(new MyClass() { SomeField = "Ms" });
以下不起作用(或者最好说:它给我null):
MyClass data = (myList != null) ? myList.Find(x => x.SomeField == "Ms") : null;
如果我把myList.Find(x =&gt; x.SomeField ==&#34; Ms&#34;)放在一个方法中并调用方法而不是只是在操作中调用Find,我会得到一个not - 空值! 上面也适用于简单类型,比如int,让我们说:
int i = (1 < 2) ? 1 : 0;
我的问题是:为什么?在这里使用List方法时会发生什么?
(有一点需要注意:如果你用null交换Find部分,结果仍然是null,所以问题不在于myList!= null。)