2

我知道这是一个愚蠢的问题,但仍然想确切地知道这两者之间的区别(我了解字符串 a = "" 和字符串 a = null 的区别):

string a; 
string a = null;
4

3 回答 3

3

对于局部变量,第一种形式只是声明一个变量,第二种是声明和赋值。对变量的大多数操作,例如使用输入参数调用方法或从方法返回,都需要对用作参数的变量进行赋值

string a;
MethodThatTakesAString(a); // compile time error: use of unassigned local variable 'a' !

请注意,out参数没有该要求,编译器认为a在方法调用之后分配:

string a;
MethodThatGivesAString(out a);

更多信息可以在这里找到。

于 2013-02-05T19:54:41.687 回答
2

答案取决于所述声明的范围:在本地范围内,第一个变量未赋值,而第二个变量已赋值:

void foo() {
    string a;
    if (CheckUserInput()) {
        a = "Bar";
    }
    Console.WriteLine(a); // << Error
}

对比

void foo() {
    string a = null;
    if (CheckUserInput()) {
        a = "Bar";
    }
    Console.WriteLine(a); // << Correct
}

在类范围内,没有区别:

class X {
    string a;
}

class Y {
    string a = null;
}

在这两种情况下都anull.

于 2013-02-05T19:59:06.673 回答
1

第一行只是声明了一个字符串,但未初始化。如果您尝试使用该字符串,例如:

string b = a + " says howdy";

...你会得到一个编译错误,告诉你你正在尝试使用一个未初始化的变量。

然而,第二行将变量初始化为一个值(null,这实际上是一个表示“无值”的标识符,但方式不同。至少编译器知道你明确地说“嘿,这个变量没有价值”,而不是让它悬而未决。)

于 2013-02-05T19:55:18.510 回答