为什么String.IsNullOrEmpty(str)而不是str.IsNullOrEmpty()?

6 .net c# vb.net string

有人可以向我解释为什么在.NET中我会写String.IsNullOrEmpty(str)而不是str.IsNullOrEmpty()?必须有合理的理由,但我不知道.

听起来你们都在说

  1. 你不能从C#/ .NET中为空的对象中调用方法(我在C++中这样做,它只是不访问任何成员变量)
  2. .NET 2.0中不存在扩展方法
  3. 微软并不打算更新标准,可能觉得它无关紧要

Jon*_*upp 25

如果IsNullOrEmpty是一个实例方法,则在null实例上调用它会抛出NullReferenceException,而不是像你想要的那样返回false.

它可能是一种扩展方法,但它可能会让人感到困惑 - 它看起来像一个实例方法,但不会像一个方法那样.

  • 它不可能是一种扩展方法; 它存在于C#3.0之前. (8认同)
  • 另外,当你收到`string`的`null`实例时,你不希望`IsNullOrEmpty`返回`true`吗? (3认同)

kem*_*002 9

如果str为null,则它将没有任何可访问的方法,因为没有对象的实例.尝试在空对象上调用方法时,您将获得空引用异常.

String.IsNullOrEmpty是静态的,因此它始终可用于测试字符串对象.

我想你可以争辩说拥有str.IsEmpty可能很方便(就像Jonathan说的那样,你可以为字符串对象做一个扩展方法来处理这个),但实际上调用String.IsNullOrEmpty(str)也很容易涵盖两种情况.即使它们不相同,但在处理字符串的值时,大多数人将它们等同于(在业务逻辑方面并验证我的意思是字符串存在的值).


mop*_*oke 5

String.IsNullOrEmpty 是一种类方法.

如果str是Nothing(Null)那么你就不能在它上面调用一个方法.您只能在对象上调用实例方法.