如果对象为空,如何 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 不再是必需的,使用 FirstDefaultIfEmpty 是安全的。

另一种选择是使用空合并运算符

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 值。