【问题标题】:Is there a case for a String.IsNullOrEmpty operator?是否存在 String.IsNullOrEmpty 运算符的情况?
【发布时间】:2010-08-04 14:47:19
【问题描述】:

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

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

您对此有何看法?它会不必要地膨胀语言吗?它会为其他中级操作打开与编译器如此深度集成的闸门吗?还是对语言有用。

【问题讨论】:

  • 不反对这个想法,但害怕想到 ?, ??, ???, ????, ?????, ??????, ????? ??等
  • 它实现了什么?语言的目的不是将每个语句组合到一行中……或者是吗?想象一下单行程序......
  • C#语言有很多特殊的String知识(看看"string" + "concatenation" + "works"如何)
  • @DrJokepu:混淆是相对的。
  • Intellisense 将这种方法的击键次数减少到了几个。为什么不依赖它并让代码保持可读性?

标签: c#


【解决方案1】:

Phil Haack 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> 接口的类似扩展来检查空白而不是空的版本。

他还谈到为此引入新的运算符,例如 ???,但得出的结论是,这将比有用更令人困惑 - 毕竟,引入这些扩展方法您可以做同样的事情,但它更具可读性,而且使用“每个人都知道”的速记语法。

【讨论】:

  • 问题是,作为开发人员,我们被这些令人讨厌的追求所吸引。问问自己,“这会帮助这个软件的用户吗”,“这会给使用这个软件的公司带来更好的底线吗”???
  • 如果你想引入新的扩展方法,也许这个版本表达的意思会更清楚 static class StringExtensions { public static string ValueOrDefault(this string value, string defaultValue) { return string.IsNullOrEmpty(value) ?默认值:值; } }
  • @Mitch:引入这些扩展方法的主要原因不仅仅是(仅)让这段代码看起来不错——它也是为了减少代码重复。您有多少次发现自己想要检查字符串中的null、空或空格,并在需要时提供默认值?我一直这样做。通过这些扩展方法,我节省了编写软件的时间,这(至少)有利于我为其编写软件的公司。
  • @desco:现在我想起来了,使用三元运算符确实很有意义。 (我更新了我的帖子以反映这一点。)但是,您的扩展方法将永远不会返回 null - 除了提供默认值以在空白或空白处返回 null 之外,可能还有其他情况,在这种情况下,此扩展已经涵盖了它。也就是说,如果您认为它使您的代码更具可读性和可维护性,那么您的代码就是一个很好的补充。事实上,你甚至可以在你的实现中使用“我的”扩展 =)
  • @Tomas Lycken:源扩展方法旨在与 ??运算符和这对一起表达了与我的一种方法相同的东西:检查字符串并返回自身或一些默认值。
【解决方案2】:

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

??? 这样的特殊目的运算符是一个滑坡。为什么停在那里 - 为什么不引入“null or empty or whitespace”运算符:????。实际上,菲尔在他的文章中谈到了这一点。他的总体结论是,这样的运算符会更令人困惑而不是有用。

最终,您可以使用许多不同的操作来发明运算符来表示它们 - 不幸的是,这可能会破坏语言的可读性。

【讨论】:

  • 叹息……就因为我想打几个例子,你不到一分钟就打败了我……! ;)
  • @Tomas:这似乎并没有影响你在这个问题上的得分。干得好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2013-12-22
  • 2011-11-08
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多