在这样的代码中:
int val;
if (something())
val = 10;
val++; // Error CS0165 Use of unassigned local variable
CS0165
当使用局部变量时,如果没有确定地对其进行初始化,则会收到错误消息。
在C ++世界中,这种情况是未定义的行为类情况,这意味着任何情况都是允许的。因此,也许有一个编译器错误,也许有一个编译器警告,也许有一个运行时错误,也许代码只使用了当时内存中的任何内容,并祝您好运。
可以CS0165
保证使用C#中的此类代码吗?
是否存在这种特定代码段不产生错误消息的情况?
是否可以为C#中的此类代码保证CS0165?
是的,确定分配规则的目的是使局部变量在明确写入之前永远无法读取。
这也很保守-例如:
bool condition = false;
int x;
if (condition)
{
x = 0;
}
if (!condition)
{
x = 1;
}
Console.WriteLine(x); // Error
即使我们知道if
将只输入其中一个语句主体,在这里编译器也不会输入-因此x
在末尾肯定没有分配。
确定分配的规则在5.3节的C#5规范中。
请注意,变量的各种类别(例如,静态字段和类的实例字段)被视为“初始分配的”-但是它们具有明确指定的默认值,因此那里仍然没有未定义的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句