在我可以安全地应用ToUpper(), StartWith()等方法之前,测试我所有的字符串为空是非常烦人的…

如果字符串的默认值是空字符串,我就不必测试,而且我觉得它与其他值类型(例如int或double)更一致。 此外,Nullable<String>也有意义。

那么为什么c#的设计者选择使用null作为字符串的默认值呢?

注意:这与这个问题有关,但更关注的是为什么,而不是如何处理它。


当前回答

为什么字符串类型的默认值为空而不是空 字符串?

因为string是一个引用类型,所有引用类型的默认值都是null。

在我可以之前,测试我所有的字符串是否为null是非常烦人的 安全应用方法,如ToUpper(), StartWith()等…

这与引用类型的行为一致。在调用它们的实例成员之前,应该对空引用进行检查。

如果string的默认值是空字符串,我就不会有 来测试,我觉得它和另一个更一致 例如int或double这样的值类型。

将默认值分配给一个特定的引用类型而不是null会使它不一致。

此外,Nullable<String>也有意义。

Nullable<T>适用于值类型。值得注意的是,Nullable并没有在最初的。net平台上引入,所以如果他们改变了这一规则,就会有很多坏代码。(礼貌@jcolebrand)

其他回答

从c# 6.0开始,您还可以使用以下代码

string myString = null;
string result = myString?.ToUpper();

字符串结果将为空。

为什么字符串类型的默认值为空而不是空 字符串?

因为string是一个引用类型,所有引用类型的默认值都是null。

在我可以之前,测试我所有的字符串是否为null是非常烦人的 安全应用方法,如ToUpper(), StartWith()等…

这与引用类型的行为一致。在调用它们的实例成员之前,应该对空引用进行检查。

如果string的默认值是空字符串,我就不会有 来测试,我觉得它和另一个更一致 例如int或double这样的值类型。

将默认值分配给一个特定的引用类型而不是null会使它不一致。

此外,Nullable<String>也有意义。

Nullable<T>适用于值类型。值得注意的是,Nullable并没有在最初的。net平台上引入,所以如果他们改变了这一规则,就会有很多坏代码。(礼貌@jcolebrand)

因为字符串变量是引用,而不是实例。

在默认情况下将其初始化为Empty是可能的,但这将在整个板上引入许多不一致。

为什么c#的设计者选择使用null作为的默认值 字符串?

因为字符串是引用类型,引用类型的默认值是null。引用类型的变量存储对实际数据的引用。

在这种情况下,让我们使用default关键字;

string str = default(string); 

STR是一个字符串,所以它是一个引用类型,所以默认值是null。

int str = (default)(int);

STR是int型,所以它是一个值类型,所以默认值是0。

Habib是对的——因为字符串是引用类型。

但更重要的是,您不必每次使用它时都检查是否为null。如果有人给你的函数传递一个空引用,你可能应该抛出一个ArgumentNullException。

事情是这样的——无论如何,如果你试图对字符串调用. toupper(),框架都会为你抛出一个NullReferenceException。记住,即使你测试你的参数为空,这种情况仍然会发生,因为传递给你的函数作为参数的对象上的任何属性或方法都可能求值为空。

也就是说,检查空字符串或null是一件常见的事情,因此他们提供String.IsNullOrEmpty()和string . isnullowhitespace()仅用于此目的。