如果对象为null,如何返回空字符串?

时间:2015-08-21 10:24:45

标签: c# .net string linq null

以下是我的代码片段:

FirstOrDefault()

问题是列表中没有任何社交对象,null返回.URL""会触发异常。

我怎样才能在" one"与LINQ一致?因此,如果null返回空.URL(或自定义更好)字符串,否则{{1}}?

3 个答案:

答案 0 :(得分:41)

您可以将DefaultIfEmpty与参数一起使用以指定回退值:

var link = socials
    .Where(p => p.type == Facebook)
    .Select(p => p.Url)
    .DefaultIfEmpty("")
    .First();

FirstOrDefault不再需要了,FirstDefaultIfEmpty一起使用是安全的。

答案 1 :(得分:16)

另一种选择是使用null coalesce operator

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"; 

答案 2 :(得分:6)

使用C#6,如果从LINQ语句返回的对象不是?.,则可以使用ReportAllocsnull)返回URL,即如果找到了值,或null otherwsie。

var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL;

如果您想将null值更改为空字符串或自定义字符串,请使用null-conditional operator??)。

var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL ?? "No URL";

应该注意的是,这不会区分是找不到对象还是找到了一个对象但是有一个null URL值。

相关问题