在尝试访问对象之前检查对象上的null

时间:2014-05-12 11:36:58

标签: c# linq

有没有更好的方法来写这个? 我不喜欢null检查的方式

    editItem.FrameVent =fd.FirstOrDefault(x => x.hardwaretype == 39 
&& x.name.StartsWith("Frame Vent"))==null?null: fd.FirstOrDefault(x => x.hardwaretype == 39 
&& x.name.StartsWith("Frame Vent")).hardwareid;

我可以不用重复查询位

4 个答案:

答案 0 :(得分:6)

将其重写为:

editItem.FrameVent = fd.Where(x => x.hardwaretype == 39 && x.name.StartsWith("Frame Vent"))
                       .Select(p => p.hardwareid)
                       .FirstOrDefault();

答案 1 :(得分:0)

你也可以做得更经典一点:

var result = fd.FirstOrDefault(x => x.hardwaretype == 39 && x.name.StartsWith("Frame Vent"));
editItem.FrameVent = result == null ? null : result.hardwareid;

答案 2 :(得分:0)

您可以添加变量以简化

var frameVent = fd.FirstOrDefault(x => x.hardwaretype == 39 && x.name.StartsWith("Frame Vent"));
editItem.FrameVent = frameVent==null ? null : frameVent.hardwareid;

答案 3 :(得分:0)

就像一些额外的信息,而不是答案:

如果Microsoft确实开始实施“安全导航操作员”('?。')(as requested here),那么解决方案将如下所示:

editItem.FrameVent =
    fd.FirstOrDefault(x => x.hardwaretype == 39 && x.name.StartsWith("Frame Vent"))
    ?.hardwareid;

是否引入这个新的运营商是一个好主意是一个争论的问题。 :)