简体   繁体   English

在尝试访问对象之前检查对象是否为null

[英]Checking for null on object before trying to access it

Is there a better way of writing this? 有没有更好的书写方式? I dont like the way the null check is in there 我不喜欢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;

I could do without repeating the query bit 我可以不用重复查询位

Rewrite it as: 将其重写为:

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

You could also do it a bit more classic: 您也可以使它更经典:

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

You can add a variable to simplify 您可以添加变量以简化

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

Just as some extra information, rather than an answer: 只是一些额外的信息,而不是答案:

If Microsoft do get around to implementing the "Safe Navigation Operator" ('?.') ( as requested here ), then the solution would look like this: 如果Microsoft确实按要求实施“安全导航操作员”('?。')( 按此处的要求 ),则解决方案将如下所示:

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

Whether or not introducing this new operator would be a good idea is a matter for debate. 引入这个新的运营商是否是一个好主意,尚有待商matter。 :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM