??当两个值都不为null时,operator返回null

时间:2014-03-04 07:38:33

标签: c# linq

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,为什么会发生这种情况?

 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

3 个答案:

答案 0 :(得分:2)

  

为什么会这样?

答案很简单 - 既不存在值为“A”的存在项,也不存在值等于“B”的存在项。记住 - 值应该是“A”和“B” - 没有任何空格的大写字符串。

更新:您的示例代码工作正常。如上所述 - 如果您获得null,则您搜索的值都不存在于集合中。

enter image description here

答案 1 :(得分:0)

因为两个linq查询的结果可能为null。换句话说

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

返回null和

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

返回null。因此你得到

z=null

答案 2 :(得分:0)

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

  

?? operator被称为null-coalescing运算符。如果操作数不为null,则返回左侧操作数;否则它会返回右手操作数。

如果没有其他选择而不是null,你期望它返回什么?