在我可以安全地应用ToUpper(), StartWith()等方法之前,测试我所有的字符串为空是非常烦人的…
如果字符串的默认值是空字符串,我就不必测试,而且我觉得它与其他值类型(例如int或double)更一致。 此外,Nullable<String>也有意义。
那么为什么c#的设计者选择使用null作为字符串的默认值呢?
注意:这与这个问题有关,但更关注的是为什么,而不是如何处理它。
在我可以安全地应用ToUpper(), StartWith()等方法之前,测试我所有的字符串为空是非常烦人的…
如果字符串的默认值是空字符串,我就不必测试,而且我觉得它与其他值类型(例如int或double)更一致。 此外,Nullable<String>也有意义。
那么为什么c#的设计者选择使用null作为字符串的默认值呢?
注意:这与这个问题有关,但更关注的是为什么,而不是如何处理它。
当前回答
既然你提到了ToUpper(),这种用法是我如何找到这个线程的,我将分享这个快捷方式(字符串??" ") .ToUpper ():
private string _city;
public string City
{
get
{
return (this._city ?? "").ToUpper();
}
set
{
this._city = value;
}
}
似乎比:
if(null != this._city)
{ this._city = this._city.ToUpper(); }
其他回答
你可以写一个扩展方法(为了它的价值):
public static string EmptyNull(this string str)
{
return str ?? "";
}
现在这个工作很安全:
string str = null;
string upper = str.EmptyNull().ToUpper();
因为字符串是一个引用类型,引用类型的默认值是null。
也许你可以用??运算符赋值字符串变量时,它可能会有帮助。
string str = SomeMethodThatReturnsaString() ?? "";
// if SomeMethodThatReturnsaString() returns a null value, "" is assigned to str.
string关键字可能使您感到困惑,因为它看起来与任何其他值类型声明完全相同,但它实际上是System的别名。在这个问题中解释的字符串。 此外,Visual Studio中的深蓝色和小写首字母可能会让人误以为它是结构体。
为什么c#的设计者选择使用null作为的默认值 字符串?
因为字符串是引用类型,引用类型的默认值是null。引用类型的变量存储对实际数据的引用。
在这种情况下,让我们使用default关键字;
string str = default(string);
STR是一个字符串,所以它是一个引用类型,所以默认值是null。
int str = (default)(int);
STR是int型,所以它是一个值类型,所以默认值是0。