三元运算符在VS2008中与List方法有关

时间:2016-02-02 15:45:00

标签: c# visual-studio visual-studio-2008 ternary-operator

在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。)

1 个答案:

答案 0 :(得分:1)

当面向.NET 3.5(在VS 2015中测试)时,调试器似乎存在问题。调试器表示null但是在对变量执行某些操作后,调试器会显示预期值。当针对更高版本(经过测试的.NET 4.5.2)时,调试器已经在第一个断点处显示非空值。

.NET 3.5:

NULL in debugger at first breakpoint Not NULL in debugger at the second breakpoint

.NET 4.5.2:

enter image description here