在VS2008中,似乎在三元運算中使用Find,FirstOrDefault和類似的方法存在很大問題。 考慮下面的非常簡單的例子:在VS2008中使用List方法的三元運算符問題
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方法時發生了什麼?
(有一點需要注意:如果你使用零交換查找部分,其結果仍然是空的,所以問題不在於myList中!= NULL)
無法重現。 –
當我提供[mcve]時,我會很高興測試它。在那之前,我們可以做的事情並不多。 –
將目標框架設置爲.NET 3.5(VS 2015)我可以使用提供的代碼重現此問題。它工作在更高版本。在.NET 3.5中使用.Where(...)。FirstOrDefault()確實可行。只是找不到(...)。奇怪的是,之前從未遇到過這個。 – Mark