在我可以安全地应用ToUpper(), StartWith()等方法之前,测试我所有的字符串为空是非常烦人的…
如果字符串的默认值是空字符串,我就不必测试,而且我觉得它与其他值类型(例如int或double)更一致。 此外,Nullable<String>也有意义。
那么为什么c#的设计者选择使用null作为字符串的默认值呢?
注意:这与这个问题有关,但更关注的是为什么,而不是如何处理它。
在我可以安全地应用ToUpper(), StartWith()等方法之前,测试我所有的字符串为空是非常烦人的…
如果字符串的默认值是空字符串,我就不必测试,而且我觉得它与其他值类型(例如int或double)更一致。 此外,Nullable<String>也有意义。
那么为什么c#的设计者选择使用null作为字符串的默认值呢?
注意:这与这个问题有关,但更关注的是为什么,而不是如何处理它。
当前回答
String是一个不可变对象,这意味着当给定一个值时,旧的值不会从内存中删除,而是保留在旧的位置,而新值则放在新的位置。如果String a的默认值是String。空,它将浪费字符串。当它被赋予第一个值时,内存中的空块。
虽然它看起来微不足道,但在初始化一个默认值为String.Empty的大型字符串数组时,它可能会变成一个问题。当然,如果这将成为一个问题,您总是可以使用可变的StringBuilder类。
其他回答
如果string的默认值是空字符串,我就不必进行测试
错了!更改默认值并不会改变它是引用类型的事实,并且有人仍然可以显式地将引用设置为空。
此外,Nullable<String>也有意义。
真正的点。不允许任何引用类型为空会更有意义,而需要Nullable<TheRefType>作为该特性。
那么为什么c#的设计者选择使用null作为字符串的默认值呢?
与其他引用类型的一致性。现在,为什么在引用类型中允许空呢?可能会让它感觉像C语言,尽管在一种也提供Nullable的语言中,这是一个有问题的设计决策。
为什么c#的设计者选择使用null作为的默认值 字符串?
因为字符串是引用类型,引用类型的默认值是null。引用类型的变量存储对实际数据的引用。
在这种情况下,让我们使用default关键字;
string str = default(string);
STR是一个字符串,所以它是一个引用类型,所以默认值是null。
int str = (default)(int);
STR是int型,所以它是一个值类型,所以默认值是0。
因为字符串变量是引用,而不是实例。
在默认情况下将其初始化为Empty是可能的,但这将在整个板上引入许多不一致。
String是一个不可变对象,这意味着当给定一个值时,旧的值不会从内存中删除,而是保留在旧的位置,而新值则放在新的位置。如果String a的默认值是String。空,它将浪费字符串。当它被赋予第一个值时,内存中的空块。
虽然它看起来微不足道,但在初始化一个默认值为String.Empty的大型字符串数组时,它可能会变成一个问题。当然,如果这将成为一个问题,您总是可以使用可变的StringBuilder类。
空字符串和空字符串是完全不同的。null是指没有值,空字符串是指空值。
编程语言对变量的“值”(在这种情况下是空字符串)进行假设,与使用任何其他不会导致空引用问题的值初始化字符串一样好。
同样,如果您将该字符串变量的句柄传递给应用程序的其他部分,那么该代码将无法验证您是故意传递了一个空白值,还是忘记填充该变量的值。
Another occasion where this would be a problem is when the string is a return value from some function. Since string is a reference type and can technically have a value as null and empty both, therefore the function can also technically return a null or empty (there is nothing to stop it from doing so). Now, since there are 2 notions of the "absence of a value", i.e an empty string and a null, all the code that consumes this function will have to do 2 checks. One for empty and the other for null.
简而言之,一个状态只有一种表示总是好的。有关empty和nulls的更广泛讨论,请参阅下面的链接。
https://softwareengineering.stackexchange.com/questions/32578/sql-empty-string-vs-null-value
在处理用户输入时,NULL vs Empty