我有一个场景,我需要查询一个对象,如果返回null,那么我需要以不同的方式查询相同的对象,我决定使用null合并运算符,以下是代码:
var requestedMaterials = request.Lines.FirstOrDefault(
w => w.Description.Trim() == material.Description.Trim() &&
w.Grade.Grades.Any(q => q.Quantity > 0)) ??
request.Lines.FirstOrDefault(w => w.Description.Trim() == material.Description.Trim() && w.Quantity > 0)左边的操作数应该返回null,而右边的不是,事实上,如果我将它设置为一个变量,我可以看到它的值不是null,但是由于某种原因,当我以这种方式使用这两个查询时,requestMaterials是null,而不是右边的操作数的值。
我已经确认,当我将这两个查询设置为变量并使用'??‘运算符,它可以像预期的那样工作,我现在把它放在这里,但是我真的很好奇为什么它不能以另一种方式工作。
工作示例(用materialsWithoutGrade填充requestedMaterials):
var materialsWithGrade = request.Lines.FirstOrDefault(w => w.Description.Trim() == material.Description.Trim() && w.Grade.Grades.Any(q => q.Quantity> 0));
var materialsWithoutGrade = request.Lines.FirstOrDefault(w => w.Description.Trim() == material.Description.Trim() && w.Quantity> 0);
var requestedMaterials = materialsWithGrade ?? materialsWithoutGrade;发布于 2014-03-05 07:18:15
如果找到匹配,则FirstOrDefault返回值,否则返回默认值(TSource)。这个??返回默认值( TSource),可以是任何值(null或TSource类型的默认值)。将结果赋给变量后,现在变量保存的值为空值。所以呢??现在能够像预期的那样工作。
https://stackoverflow.com/questions/21259455
复制相似问题