5

为什么在实际使用它进行比较之前,我总是需要为字符串变量赋值。例如:一些输入 - obj

        string temp;
        if (obj== null)
        {
            temp = "OK";
        }
        string final = temp;

我收到编译时错误 - 类似于 - 无法使用未分配的变量“temp”。但是字符串变量的默认值为'null',我想使用它。那么为什么不允许这样做呢?

4

2 回答 2

7

当默认值为空时

局部变量的默认值不是null (或其他任何值)。它只是未分配。

您可能正在考虑一个字符串字段(类级别的变量)。那将是null

private string temp;

private void M()
{
   if (obj== null)
   {
       temp = "OK";
   }
   string final = temp;  // default tnull
}

但是在方法内部,只需使用您需要的值进行初始化:

string temp = null;
于 2012-10-16T11:33:13.907 回答
2

然后将 null 作为局部变量的默认值:

string temp = null;

这只是一个编译器提示,您可能忘记分配一个值。通过明确分配 null 你告诉编译器你已经考虑过了。

C# 语言规范 v. 4.0 第 1.6.6.2 节“方法体和局部变量”声明如下:

方法体可以声明特定于方法调用的变量。这样的变量称为局部变量。... C# 要求在获得其值之前明确分配一个局部变量。

于 2012-10-16T11:33:59.227 回答