Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS2008中列表方法的三元运算符问题_C#_Visual Studio_Visual Studio 2008_Ternary Operator - Fatal编程技术网

C# VS2008中列表方法的三元运算符问题

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

在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" });
如果我将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;