返回非空对象的属性值
我有一个包含可能有空的Person对象的对象列表。 我想要做的是获取第一个Person对象的Name属性的值不为null,如果所有Person对象都为null,则返回一个空字符串。
我最好的尝试如下:
string userName = MyObjectList.FirstOrDefault(x => x.Person != null).Person.Name ?? string.Empty;
我想我明白为什么这不起作用; 如果Person对于列表中的每个对象都为null,那么我们将得到默认值,该值将为null,并在尝试访问Person属性时引发null引用错误。
我可以通过检查任何对象是否为空,然后获取第一个来获得我想要的结果,但我宁愿在一个LINQ语句中完成此操作。 任何输入赞赏,谢谢。
通常的技巧看起来像这样:
string userName = MyObjectList.Where(x => x.Person != null)
.Select(x => x.Person.Name)
.FirstOrDefault() ?? string.Empty;
或者按照Servy的建议:
string userName = MyObjectList.Where(x => x.Person != null)
.Select(x => x.Person.Name)
.DefaultIfEmpty(string.Empty)
.First();
使用C#6的空条件运算符更新现在相对容易:
string userName = MyObjectList.FirstOrDefault(x => x.Person != null)?.Person.Name ?? string.Empty;
我会这样做两个陈述:
var personContainer = MyObjectList.FirstOrDefault(x => x.Person != null);
string userName = personContainer == null ? string.Empty : personContainer.Person.Name;
您正在访问空对象并尝试读取其属性。
看看这样的东西:
var obj = MyObjectList.FirstOrDefault(x => x.Person != null);
string userName = string.Empty;
if (null != obj) {
userName = obj.Person.Name;
}
祝你好运!
链接地址: http://www.djcxy.com/p/51355.html上一篇: Returning value of a property of an object that is not null