首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >??是否合并为空字符串?

??是否合并为空字符串?
EN

Stack Overflow用户
提问于 2010-03-11 04:01:10
回答 8查看 78.4K关注 0票数 180

我发现自己越来越多地在检查字符串是否为空(如在""或null中)和条件运算符。

当前示例:

代码语言:javascript
复制
s.SiteNumber.IsNullOrEmpty() ? "No Number" : s.SiteNumber;

这只是一个扩展方法,它等同于:

代码语言:javascript
复制
string.IsNullOrEmpty(s.SiteNumber) ? "No Number" : s.SiteNumber;

因为它是空的并且不是null,所以??不会这样做。??string.IsNullOrEmpty()版本将是完美的解决方案。我在想,一定有一种更干净的方式来做这件事(我希望!),但我一直在迷茫地寻找它。

有没有人知道更好的方法,即使是在.Net 4.0中也是如此?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-03-11 04:03:34

没有一种内置的方法可以做到这一点。但是,您可以让扩展方法返回一个字符串或null,这将允许合并运算符工作。然而,这会很奇怪,我个人更喜欢你目前的方法。

既然您已经在使用扩展方法,为什么不直接创建一个返回值或默认值的方法:

代码语言:javascript
复制
string result = s.SiteNumber.ConvertNullOrEmptyTo("No Number");
票数 77
EN

Stack Overflow用户

发布于 2017-06-23 16:57:52

null-coalescing运算符的优点之一是它短路。如果第一部分不为空,则不计算第二部分。当回退需要开销很大的操作时,这会很有用。

我最终得到了:

代码语言:javascript
复制
public static string Coalesce(this string s, Func<string> func)
{
    return String.IsNullOrEmpty(s) ? func() : s;
}

用法:

代码语言:javascript
复制
string navigationTitle = model?.NavigationTitle.
    Coalesce(() => RemoteTitleLookup(model?.ID)). // Expensive!
    Coalesce(() => model?.DisplayName);
票数 8
EN

Stack Overflow用户

发布于 2018-02-22 19:35:19

我简单地使用了一个NullIfEmpty扩展方法,如果字符串为空,它将始终返回null,从而允许??(空合并运算符)正常使用。

代码语言:javascript
复制
public static string NullIfEmpty(this string s)
{
    return string.IsNullOrEmpty(s) ? null : s;
}

这就允许??像平常一样使用,并使链接易于阅读。

代码语言:javascript
复制
string string1 = string2.NullIfEmpty() ?? string3.NullIfEmpty() ?? string4;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2420125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档