首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与null合并运算符混合时出现FirstOrDefault意外结果

问与null合并运算符混合时出现FirstOrDefault意外结果
EN

Stack Overflow用户
提问于 2014-01-21 21:24:34
回答 1查看 1.1K关注 0票数 0

我有一个场景,我需要查询一个对象,如果返回null,那么我需要以不同的方式查询相同的对象,我决定使用null合并运算符,以下是代码:

代码语言:javascript
复制
 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):

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2014-03-05 07:18:15

如果找到匹配,则FirstOrDefault返回值,否则返回默认值(TSource)。这个??返回默认值( TSource),可以是任何值(null或TSource类型的默认值)。将结果赋给变量后,现在变量保存的值为空值。所以呢??现在能够像预期的那样工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21259455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档