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
这也适用
请注意,这两个值都不为空!
答案 0 :(得分:2)
为什么会这样?
答案很简单 - 既不存在值为“A”的存在项,也不存在值等于“B”的存在项。记住 - 值应该是“A”和“B” - 没有任何空格的大写字符串。
更新:您的示例代码工作正常。如上所述 - 如果您获得null,则您搜索的值都不存在于集合中。
答案 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,你期望它返回什么?