C# VS2008中列表方法的三元运算符问题
在VS2008中,在三元运算中使用Find、FirstOrDefault和类似方法似乎有一个大问题。 给出以下非常基本的示例:C# VS2008中列表方法的三元运算符问题,c#,visual-studio,visual-studio-2008,ternary-operator,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() { SomeFi
List<MyClass> myList = new List<MyClass>();
myList.Add(new MyClass() { SomeField = "Mr" });
myList.Add(new MyClass() { SomeField = "Mrs" });
myList.Add(new MyClass() { SomeField = "Ms" });
如果我将myList.Find(x=>x.SomeField==“Ms”)放在一个方法中,并调用该方法,而不是在操作中调用Find,我将得到一个NOTNULL值!
上述方法也适用于简单类型,如int,比如:
int i = (1 < 2) ? 1 : 0;
inti=(1<2)?1 : 0;
我的问题是:为什么?在这里使用列表方法时会发生什么
(需要注意的一点是:如果将Find部分与null进行交换,结果仍然为null,因此问题不在于myList!=null。)当以.NET 3.5为目标时,调试器似乎存在问题(在VS 2015中测试)。调试器显示null,但在使用变量执行某些操作后,调试器显示预期值。当针对更高版本(已测试的.NET 4.5.2)时,调试器已在第一个断点处显示非空值 .NET 3.5: .NET 4.5.2:
无法复制。我很乐意测试它-如果有一个。在那之前,我们没有什么可以做的。将目标框架设置为.NET3.5(VS2015),我可以使用提供的代码复制它。它在更高版本中工作。在.NET 3.5中使用.Where(…).FirstOrDefault()确实有效。只是找不到(…)。奇怪,以前从未遇到过。我们做了一些额外的测试。这似乎是延迟加载的“问题”。只要您不引用MyClass内的字段,该类就看起来像null。但是,即使您检查数据是否为空,似乎您的实际数据也会被提取到数据实例中。@Daniel我现在明白了,调试器的行为确实有所不同:手表在3.5中显示为空,但在控制台中显示为空。写入它实际上会产生非空结果。我认为这是因为“延迟加载”。
int i = (1 < 2) ? 1 : 0;