如果对象为空,如何 return 清空字符串?
How to return empty string if an object is null?
这是我的代码片段:
var link = socials.Where(p => p.type == Facebook).FirstOrDefault().URL;
问题是列表中没有任何社交对象,FirstOrDefault()
return null
,.URL
触发异常
如何使用 LINQ 在 "one" 行中避免这种情况?因此,如果 null return 空 ""
(或自定义更好)字符串,否则 .URL
?
您可以使用 DefaultIfEmpty
和参数来指定回退值:
var link = socials
.Where(p => p.type == Facebook)
.Select(p => p.Url)
.DefaultIfEmpty("")
.First();
FirstOrDefault
不再是必需的,使用 First
和 DefaultIfEmpty
是安全的。
另一种选择是使用空合并运算符
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";
使用 C# 6,如果从 LINQ 语句 returned 的对象不是't null
,即如果找到一个值,或者 null
otherwsie.
var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL;
如果您随后想将 null
值更改为空字符串或自定义字符串,请使用 null-coalescing operator (??
).
var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL ?? "No URL";
应该注意的是,这不会区分对象是未找到还是已找到但具有 null
URL 值。
这是我的代码片段:
var link = socials.Where(p => p.type == Facebook).FirstOrDefault().URL;
问题是列表中没有任何社交对象,FirstOrDefault()
return null
,.URL
触发异常
如何使用 LINQ 在 "one" 行中避免这种情况?因此,如果 null return 空 ""
(或自定义更好)字符串,否则 .URL
?
您可以使用 DefaultIfEmpty
和参数来指定回退值:
var link = socials
.Where(p => p.type == Facebook)
.Select(p => p.Url)
.DefaultIfEmpty("")
.First();
FirstOrDefault
不再是必需的,使用 First
和 DefaultIfEmpty
是安全的。
另一种选择是使用空合并运算符
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";
使用 C# 6,如果从 LINQ 语句 returned 的对象不是't null
,即如果找到一个值,或者 null
otherwsie.
var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL;
如果您随后想将 null
值更改为空字符串或自定义字符串,请使用 null-coalescing operator (??
).
var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL ?? "No URL";
应该注意的是,这不会区分对象是未找到还是已找到但具有 null
URL 值。