使用空赋值修复"使用未分配的局部变量".为什么?

And*_*ech 32 c# exception variable-assignment

使用这样的一段代码,编译器抱怨c.MyProperty:

MyClass c;

try { throw new Exception(); }
catch (Exception) { }

c.MyProperty = 2; // "Use of unassigned local variable 'c'".
Run Code Online (Sandbox Code Playgroud)

然而,如果你指定一个不抱怨null到c在初始化:

MyClass c = null;

try { throw new Exception(); }
catch (Exception) { }

c.MyProperty = 2; // no complains this time.
Run Code Online (Sandbox Code Playgroud)

那么,为什么这有效呢?如果c未分配a null并且编译器假设允许它,则不会抛出相同的异常c.MyProperty,Object引用未设置为对象的实例?

Joã*_*elo 66

当你分配null给变量时,你告诉编译器退出,因为你比他更了解所以他不应该抱怨这个.

这可能是由于分配null被认为意味着开发人员采取明确的行动.

  • @Andreas:这是实际答案,这就是允许的原因.C#会让你**故意**在脚下射击自己.它只是不会让你这么做_无意中_. (21认同)
  • 虽然这让我发笑,但我仍然没有接近答案. (4认同)
  • 我一直以为编译器是她的。 (3认同)
  • 尽管我的回答方式旨在使我的观点更加幽默,但我确实认为,这可能就是为什么编译器停止抱怨的原因,因此即使在一天结束时都不是正确的答案,这也是一个有效的答案。 (2认同)