我发现自己越来越多地在检查字符串是否为空(如在""
或null中)和条件运算符。
当前示例:
s.SiteNumber.IsNullOrEmpty() ? "No Number" : s.SiteNumber;
这只是一个扩展方法,它等同于:
string.IsNullOrEmpty(s.SiteNumber) ? "No Number" : s.SiteNumber;
因为它是空的并且不是null,所以??
不会这样做。??
的string.IsNullOrEmpty()
版本将是完美的解决方案。我在想,一定有一种更干净的方式来做这件事(我希望!),但我一直在迷茫地寻找它。
有没有人知道更好的方法,即使是在.Net 4.0中也是如此?
发布于 2010-03-11 04:03:34
没有一种内置的方法可以做到这一点。但是,您可以让扩展方法返回一个字符串或null,这将允许合并运算符工作。然而,这会很奇怪,我个人更喜欢你目前的方法。
既然您已经在使用扩展方法,为什么不直接创建一个返回值或默认值的方法:
string result = s.SiteNumber.ConvertNullOrEmptyTo("No Number");
发布于 2017-06-23 16:57:52
null-coalescing运算符的优点之一是它短路。如果第一部分不为空,则不计算第二部分。当回退需要开销很大的操作时,这会很有用。
我最终得到了:
public static string Coalesce(this string s, Func<string> func)
{
return String.IsNullOrEmpty(s) ? func() : s;
}
用法:
string navigationTitle = model?.NavigationTitle.
Coalesce(() => RemoteTitleLookup(model?.ID)). // Expensive!
Coalesce(() => model?.DisplayName);
发布于 2018-02-22 19:35:19
我简单地使用了一个NullIfEmpty扩展方法,如果字符串为空,它将始终返回null,从而允许??(空合并运算符)正常使用。
public static string NullIfEmpty(this string s)
{
return string.IsNullOrEmpty(s) ? null : s;
}
这就允许??像平常一样使用,并使链接易于阅读。
string string1 = string2.NullIfEmpty() ?? string3.NullIfEmpty() ?? string4;
https://stackoverflow.com/questions/2420125
复制相似问题