2014-03-04 66 views
-7
class ResultType 
{ 
    public string Value{ get; set; } 
    public int Count{ get; set; } 
} 
var someList = new List<ResultType>(){new ResultType(){Value = "A"},new ResultType(){Value = "B"}}; 

ResultType z = someList.FirstOrDefault(x => x.Value == "A") ?? 
     someList.FirstOrDefault(x => x.Value == "B"); 

z應該得到值爲A的項目的值(它的項目的值爲A,B與它們不爲null!),但是我收到null爲什麼會發生這種情況???當兩個值都不爲空時,運算符返回空值

if(someList.FirstOrDefault(x => x.Value == "A")!=null) z= someList.FirstOrDefault(x => x.Value == "A"); 

這個工程。

此外,當我做到這一點

someList.FirstOrDefault(x => x.Value == "A") 

someList.FirstOrDefault(x => x.Value == "B") 

被保存到變量,然後用作

z = a ?? b 

這個作品,以及

請注意,都的值不爲空!

截圖 https://www.dropbox.com/s/ogq89shme1mhg44/Untitled.png

+0

什麼是someList的類型? (即它可以是一個值類型) – adrianm

+0

可以是小的'A'?不是帽子?或'Value'財產很可能是的'Object'類型 –

+0

嘗試創建並打印所有值檢查什麼有裏面。 – ZaoTaoBao

回答

0

因爲無論你的LINQ查詢的結果可能爲空。換句話說

someList.FirstOrDefault(x => x.Value == "A") 

返回null,

someList.FirstOrDefault(x => x.Value == "B") 

返回null。因此你得到

z=null 
2

爲什麼會發生這種情況?

答案很簡單 - 既不存在值等於「A」的項目也不存在值等於「B」的項目。記住 - 值應該是完全「A」和「B」 - 大寫的字符串,沒有任何的空格。

UPDATE:你的示例代碼工作正常。如上所述 - 如果您得到空值,那麼您搜索的值都不存在於集合中。

enter image description here

+0

,如果它存在,但是'Value'是類型'Object' –

+0

@SriramSakthivel不,如果'Value'是'object'這實際上是這甚至可能發生'string'那麼比較將工作沒有問題 –

+0

完全相同的值,見下面的代碼,工作沒有?? – atikot

0

http://msdn.microsoft.com/en-us/library/ms173224.aspx

的??運算符稱爲空合併運算符。如果操作數不爲null,則返回左側的操作數;否則返回右手操作數。

如果沒有其他選擇,它會返回什麼?

+0

複製粘貼週期值的值不爲空,請參閱我添加的代碼,它確實沒有工作?操作者 – atikot