Nic*_*ver 154 c# string coalesce null-coalescing-operator
我发现自己做的越来越多的事情是检查字符串是否为空(如in ""或null)和条件运算符.
一个当前的例子:
s.SiteNumber.IsNullOrEmpty() ? "No Number" : s.SiteNumber;
Run Code Online (Sandbox Code Playgroud)
这只是一种扩展方法,它相当于:
string.IsNullOrEmpty(s.SiteNumber) ? "No Number" : s.SiteNumber;
Run Code Online (Sandbox Code Playgroud)
因为它是空的而不是null,所以??不会这样做.一个string.IsNullOrEmpty()版本??将是完美的解决方案.我认为必须有一个更清洁的方式来做这件事(我希望!),但我一直在找不到它.
有没有人知道更好的方法来做到这一点,即使它只在.Net 4.0中?
Red*_*ter 121
C#已经让我们的替代值null有??.所以我们需要的是一个将空字符串转换为的扩展,null然后我们像这样使用它:
s.SiteNumber.NullIfEmpty() ?? "No Number";
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 70
没有内置的方法来做到这一点.您可以使您的扩展方法返回一个字符串或null,但这将允许合并运算符工作.然而,这很奇怪,我个人更喜欢你现在的做法.
由于您已经在使用扩展方法,为什么不只是创建一个返回值或默认值:
string result = s.SiteNumber.ConvertNullOrEmptyTo("No Number");
Run Code Online (Sandbox Code Playgroud)
sfs*_*fsr 39
我知道这是一个老问题 - 但我一直在寻找答案,以上所有内容都不符合我的需要以及我最终使用的内容:
private static string Coalesce(params string[] strings)
{
return strings.FirstOrDefault(s => !string.IsNullOrEmpty(s));
}
Run Code Online (Sandbox Code Playgroud)
用法:
string result = Coalesce(s.SiteNumber, s.AltSiteNumber, "No Number");
Run Code Online (Sandbox Code Playgroud)
编辑: 编写此函数的更紧凑的方法是:
static string Coalesce(params string[] strings) => strings.FirstOrDefault(s => !string.IsNullOrEmpty(s));
Run Code Online (Sandbox Code Playgroud)
Jus*_*gan 15
我有几个我喜欢使用的实用程序扩展:
public static string OrDefault(this string str, string @default = default(string))
{
return string.IsNullOrEmpty(str) ? @default : str;
}
public static object OrDefault(this string str, object @default)
{
return string.IsNullOrEmpty(str) ? @default : str;
}
Run Code Online (Sandbox Code Playgroud)
编辑:受sfsr的回答启发,我将从现在开始将这个变体添加到我的工具箱中:
public static string Coalesce(this string str, params string[] strings)
{
return (new[] {str})
.Concat(strings)
.FirstOrDefault(s => !string.IsNullOrEmpty(s));
}
Run Code Online (Sandbox Code Playgroud)
小智 6
比之前提出的扩展方法稍快一些:
public static string Fallback(this string @this, string @default = "")
{
return (@this == null || @this.Trim().Length == 0) ? @default : @this;
}
Run Code Online (Sandbox Code Playgroud)
零空值运算符的一个优点是它短路.当第一部分不为null时,不评估第二部分.当后备需要昂贵的操作时,这可能很有用.
我结束了:
public static string Coalesce(this string s, Func<string> func)
{
return String.IsNullOrEmpty(s) ? func() : s;
}
Run Code Online (Sandbox Code Playgroud)
用法:
string navigationTitle = model?.NavigationTitle.
Coalesce(() => RemoteTitleLookup(model?.ID)). // Expensive!
Coalesce(() => model?.DisplayName);
Run Code Online (Sandbox Code Playgroud)
我只是使用 NullIfEmpty 扩展方法,如果字符串为空允许 ?? (空合并运算符)正常使用。
public static string NullIfEmpty(this string s)
{
return string.IsNullOrEmpty(s) ? null : s;
}
Run Code Online (Sandbox Code Playgroud)
这然后允许?? 正常使用并使链接易于阅读。
string string1 = string2.NullIfEmpty() ?? string3.NullIfEmpty() ?? string4;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59171 次 |
| 最近记录: |