在下面我得到一个编译时错误,如果我输入字符串匹配,则说"使用未分配的局部变量'匹配'"; 但是当我使用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为值,从一开始就标记为明确分配.因此,循环计算无关紧要
取决于您的方案,但是:
string match = null;
Run Code Online (Sandbox Code Playgroud)
要么:
string match = string.Empty;
Run Code Online (Sandbox Code Playgroud)
都是可接受的做法.
在您的情况下,match永远不可能分配值,因此编译器错误.
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |