将变量赋值为null的是什么?

Jiv*_*gie 7 c#

在下面我得到一个编译时错误,如果我输入字符串匹配,则说"使用未分配的局部变量'匹配'"; 但是当我使用string match = null时它可以工作; 那么有什么区别,一般来说,如果没有立即为字符串分配值,我应该像这样分配给null吗?

string question = "Why do I need to assign to null";
char[] delim = { ' ' };
string[] strArr = question.Split(delim);
//Throws Error
string match;
//No Error
//string match = null;
foreach (string s in strArr)
 {
    if (s == "Why")
      {
         match = "Why";
      }
 }
Console.WriteLine(match);
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 12

在确定为值分配之前,C#语言会阻止使用本地语言.在此示例中,编译器不理解其语义,Split并且必须假设它strArr可以是空集合,因此循环体可能无法执行.这意味着从明确的赋值角度来看,foreach它不会赋值match.因此,当你到达时,它仍然没有被分配WriteLine

通过将声明更改string match = null为值,从一开始就标记为明确分配.因此,循环计算无关紧要


xan*_*ded 5

取决于您的方案,但是:

string match = null;
Run Code Online (Sandbox Code Playgroud)

要么:

string match = string.Empty;
Run Code Online (Sandbox Code Playgroud)

都是可接受的做法.

在您的情况下,match永远不可能分配值,因此编译器错误.