繁体   English   中英

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

[英]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 ,使用FirstDefaultIfEmpty是安全的。

另一种选择是使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM