是否存在String.IsNullOrEmpty运算符的情况?

时间:2010-08-04 14:47:20

标签: c#

String.IsNullOrEmpty()似乎是一种非常好用的方法,我发现自己希望有一些简写。类似于???的东西,因为它将在与null coalesce运算符类似的上下文中使用,但可以扩展为测试空字符串和空字符串。即。

 string text = something.SomeText ??? "Not provided";

您对此有何看法?它会不必要地膨胀这种语言吗?是否会打开其他中级操作的闸门,以便与编译器进行如此深度的集成?或者它是该语言的有用补充。

2 个答案:

答案 0 :(得分:18)

不久前菲尔哈克blogged about this。基本上,他建议string上的扩展方法可以让你做

var text = someString.AsNullIfEmpty() ?? "Not provided.";

扩展方法非常简单:

public static string AsNullIfEmpty(this string str)
{
    return !string.IsNullOrEmpty(str) ? str : null;
}

他还建议使用.NET 4中的string.IsNullOrWhitespace()方法检查空格而不是空白,以及IEnumerable<T>接口的类似扩展。

他还谈到了为此引入新的运算符,例如???,但结论是它会更有说服力而不是有用 - 毕竟,引入这些扩展方法你可以做同样的事情,但它更具可读性,它使用“每个人都已经知道”的简写语法。

答案 1 :(得分:6)

Phil Haack在他的博客上讨论了这个确切的操作。你应该查看他的文章Null Or Empty Coalescing

???这样的特殊目的运营商是一个滑坡。为什么不止于此 - 为什么不引入“ null或空或空格”运算符:????。实际上,菲尔在他的文章中谈到了这一点。他的总体结论是,这些运营商会比有用的人更容易混淆。

最终,你可以采用许多不同的操作来代表他们 - 不幸的是,这可能会破坏语言的可读性。