为什么在实际使用它进行比较之前,我总是需要为字符串变量赋值。例如:一些输入 - obj
string temp;
if (obj== null)
{
temp = "OK";
}
string final = temp;
我收到编译时错误 - 类似于 - 无法使用未分配的变量“temp”。但是字符串变量的默认值为'null',我想使用它。那么为什么不允许这样做呢?
当默认值为空时
局部变量的默认值不是null (或其他任何值)。它只是未分配。
您可能正在考虑一个字符串字段(类级别的变量)。那将是null
:
private string temp;
private void M()
{
if (obj== null)
{
temp = "OK";
}
string final = temp; // default tnull
}
但是在方法内部,只需使用您需要的值进行初始化:
string temp = null;
然后将 null 作为局部变量的默认值:
string temp = null;
这只是一个编译器提示,您可能忘记分配一个值。通过明确分配 null 你告诉编译器你已经考虑过了。
C# 语言规范 v. 4.0 第 1.6.6.2 节“方法体和局部变量”声明如下:
方法体可以声明特定于方法调用的变量。这样的变量称为局部变量。... C# 要求在获得其值之前明确分配一个局部变量。