我有一个需要查询对象的场景,如果返回null,那么我需要以不同方式查询同一个对象,我决定使用null-coalescing运算符,这里是代码:
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,但由于某种原因,当我以这种方式使用这两个查询时,请求材料为null,而不是具有右手操作数的值。
我已经确认,当我将这两个查询设置为变量并使用'??'时对它们的操作,它按预期工作,我现在已经这样离开了,但我真的很好奇为什么它不起作用。
工作示例(requestedMaterials填充了materialsWithoutGrade):
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;
答案 0 :(得分:0)
如果匹配找到,FirstOrDefault返回一个值,否则返回默认值(TSource)。 ?? ??返回默认值(TSource),可以是任何值(null或TSource类型的默认值)。将结果分配给变量后,now变量保持空值。所以?能够按预期工作。