VS2008 中 List 方法的三元运算符问题

Ternary operator issues with List methods in VS2008

在 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" });

以下不起作用(或者最好说:它给了我空):

MyClass data = (myList != null) ? myList.Find(x => x.SomeField == "Ms") : null;

如果我将 myList.Find(x => x.SomeField == "Ms") 放在一个方法中并调用该方法而不是仅在操作中调用查找,我将得到一个非空值! 以上也适用于简单类型,比如 int,比方说:

int i = (1 < 2) ? 1 : 0;

我的问题是:为什么?在这里使用 List 方法时发生了什么?

(注意一点:如果将查找部分与null交换,结果仍然是null,所以问题不在myList!= null。)

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

.NET 3.5:

.NET 4.5.2: