【发布时间】:2009-09-11 20:52:25
【问题描述】:
我注意到 Visual Studio 的一些特殊之处。首先,尝试在函数的某处输入这个(C#):
class Foo
{
public void Bar()
{
string s;
int i = s.Length;
}
}
现在,它会立即将s.Length 中的s 标记为错误,即“Use of unassigned local variable 's'”。另一方面,试试这个代码:
class Foo
{
private string s;
public void Bar()
{
int i = s.Length;
}
}
它将编译,并在private string s 中的s 下划线并带有警告,说“Field 'Foo.s' is never assigned to, and will always have its default value null”。
现在,如果 VS 这么聪明并且知道 s 将始终为空,为什么在第二个示例中获取其长度不是错误?我最初的猜测是,“如果编译器根本无法完成它的工作,它只会给出一个编译错误。因为从技术上讲,只要你从不调用 Bar(),代码就会运行,这只是一个警告。”除了解释被第一个例子无效。只要您从不调用 Bar(),您仍然可以运行代码而不会出错。那么给了什么?只是疏忽,还是我遗漏了什么?
【问题讨论】:
标签: c# visual-studio compiler-construction nullreferenceexception