string.IsNullOrEmpty()vs string.NotNullOrEmpty()

Chr*_*s S 28 .net c# string

我很好奇是否有任何开发人员使用string.IsNullOrEmpty()更多地使用负数而不是正数

例如

if (!string.IsNullOrEmpty())
Run Code Online (Sandbox Code Playgroud)

这就是我99%的时间使用这种方法的方法.对此有何设计决定?

Ken*_*art 59

因为"IsNullOrEmpty"比"NotNullOrEmpty"更容易理解.后者可以解释为:

  1. 它不是空的,它不是空的
  2. 它不是null或是空的


Meh*_*ari 36

在命名内容时通常不鼓励双重否定.!string.NotNullOrEmpty(...)会做一个.

  • 实际上,我们的代码库中有一个人将变量命名为“isNotGuam”。尝试破译(在 Delphi 中)的含义总是很有趣,如果不是 isNotGuam 那么 (2认同)

tva*_*son 12

对于那些逻辑学家来说,!string.IsNullOrEmpty不等同于string.IsNotNullOrEmpty.@Guffa说得对.使用DeMorgan定律,它必须是string.IsNotNullAndNotEmpty才是等价的.

¬(null∨empty)⇔¬null∧¬empty

¬(null∨空)≠¬null∨空

我想,这里的观点是它目前的方式是明确的,因为相反的明确是明显的麻烦.


Eri*_*bal 6

C#命名约定规定你的表达式应该是正面的,例如"Is ..."而不是"IsNot ......"

编辑:通常,我在方法开始时进行错误检查和输入验证时使用它,如果参数为null或为空则引发异常.

if (string.IsNullOrEmpty(myParameter))
{
throw new ....
}


Bri*_*sio 6

正如旁注,我更喜欢扩展方法:

public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string value)
    {
        return string.IsNullOrEmpty(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现说起来更好:

if(myValue.IsNullOrEmpty())
Run Code Online (Sandbox Code Playgroud)

要么

if(!myValue.IsNullOrEmpty())
Run Code Online (Sandbox Code Playgroud)

  • 除非您不应该使用null实例来使用扩展方法,因为您无法使用常规方法执行此操作. (3认同)
  • @Dan:实际上,您可以http://stackoverflow.com/questions/647643/string-isnullorblank-extension-method.+1. (3认同)
  • @Dan:我想这只是哲学......只要在方法名称中清楚,我对使用null的扩展方法没有任何问题:value.IsNull(),value.ThrowIfNull()或value.IsNullOrEmpty( ). (3认同)
  • 我敢肯定,鲍勃叔叔可能会反对,但我不认为如果我们做foo,那天空就会落在我们头上.我是否() - 我会说很明显你想要实现的目标 (2认同)

小智 5

我总是为"HasContent()"创建一个扩展方法,它通常是有意义的,遵循"正面"规范,并节省代码膨胀,因为我使用它比它的对应物更频繁:

public static bool HasContent(this string s) {
    return !string.IsNullOrEmpty(s);
}
Run Code Online (Sandbox Code Playgroud)