我有一个包含Person对象的对象列表,该对象可能为null.我想要做的是获取非空的第一个Person对象的Name属性的值,如果所有Person对象都为null,则返回一个空字符串.
我最好的尝试如下:
string userName = MyObjectList.FirstOrDefault(x => x.Person != null).Person.Name ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)
我想我明白为什么这不起作用; 如果Person对于列表中的每个对象都为null,那么我们得到默认值,该值为null,当我尝试访问属性Person时将抛出一个空引用错误.
我可以通过检查是否有任何对象不是null然后得到第一个来获得我想要的结果,但我宁愿在一个LINQ语句中完成它.任何意见都表示赞赏,谢谢.
p.s*_*w.g 26
通常的技巧看起来像这样:
string userName = MyObjectList.Where(x => x.Person != null)
.Select(x => x.Person.Name)
.FirstOrDefault() ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)
或者遵循Servy的建议:
string userName = MyObjectList.Where(x => x.Person != null)
.Select(x => x.Person.Name)
.DefaultIfEmpty(string.Empty)
.First();
Run Code Online (Sandbox Code Playgroud)
使用C#6的空条件运算符来更新它现在相对容易:
string userName = MyObjectList.FirstOrDefault(x => x.Person != null)?.Person.Name ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18117 次 |
| 最近记录: |