[英]How to return empty string if an object is null?
这是我的代码片段:
var link = socials.Where(p => p.type == Facebook).FirstOrDefault().URL;
问题是列表中没有任何社交对象, FirstOrDefault()
返回null
,而.URL
触发异常。
如何在LINQ的“one”行中避免这种情况? 因此,如果null返回空""
(或自定义更好)字符串,否则.URL
?
您可以将DefaultIfEmpty
与参数一起使用以指定回退值:
var link = socials
.Where(p => p.type == Facebook)
.Select(p => p.Url)
.DefaultIfEmpty("")
.First();
不再需要FirstOrDefault
,使用First
和DefaultIfEmpty
是安全的。
另一种选择是使用null coalesce运算符
var link = (socials
.Where(p => p.type == Facebook)
.Select(p => p.Url)
.FirstOrDefault()) ?? string.empty;
我知道string.empty
优于""
但可能不是这种情况 - 请参阅下面的评论。
更新在C#6中有一个空条件运算符(也称为“Elvis”运算符):
var link = socials
.Where(p => p.type == Facebook)
.Select(p => p.Url)
.FirstOrDefault()?.URL ?? string.empty;
一个简单的例子:
stringbuilder sb = null;
// do work
string s = sb?.ToString() ?? "no values found";
如果从LINQ语句返回的对象不为null
,即如果找到值,则使用C#6可以使用空条件运算符 ( ?.
)返回URL,或者返回null
otherwsie。
var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL;
如果您想将null
值更改为空字符串或自定义字符串,则使用null-coalescing运算符 ( ??
)。
var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL ?? "No URL";
应该注意的是,这不会区分是找不到对象还是找到了对象但是具有null
URL值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.