未分配的局部变量是否保证 CS0165 C# 编译器错误?
Is CS0165 C# compiler error guaranteed for unassigned local variables?
在这样的代码中:
int val;
if (something())
val = 10;
val++; // Error CS0165 Use of unassigned local variable
我在使用局部变量时收到 CS0165
错误消息,而它之前可能未被确定地初始化。
在 C++ 世界中,这种情况是 未定义行为 class 情况,这意味着任何事情都是允许的。所以可能存在编译器错误,可能存在编译器警告,可能存在运行时错误,可能代码只是使用了当时内存中的任何内容,祝你好运。
CS0165
是否保证在 C# 中使用此类代码?
是否存在这段特定代码不产生错误消息的情况?
Is CS0165 guaranteed for such code in C#?
是的,明确赋值的规则是为了让局部变量在明确写入之前永远不会被读取。
它也很保守 - 例如:
bool condition = false;
int x;
if (condition)
{
x = 0;
}
if (!condition)
{
x = 1;
}
Console.WriteLine(x); // Error
这里即使 我们 知道那些 if
语句体中的一个将被输入,编译器不会 - 所以 x
不是' t肯定在最后赋值。
明确赋值的规则在 C# 5 规范的第 5.3 节中。
请注意,各种 类 变量(例如静态字段和 类 的实例字段)被视为 "initially assigned" - 但它们具有明确指定的默认值,因此仍然那里没有未定义的行为。
在这样的代码中:
int val;
if (something())
val = 10;
val++; // Error CS0165 Use of unassigned local variable
我在使用局部变量时收到 CS0165
错误消息,而它之前可能未被确定地初始化。
在 C++ 世界中,这种情况是 未定义行为 class 情况,这意味着任何事情都是允许的。所以可能存在编译器错误,可能存在编译器警告,可能存在运行时错误,可能代码只是使用了当时内存中的任何内容,祝你好运。
CS0165
是否保证在 C# 中使用此类代码?
是否存在这段特定代码不产生错误消息的情况?
Is CS0165 guaranteed for such code in C#?
是的,明确赋值的规则是为了让局部变量在明确写入之前永远不会被读取。
它也很保守 - 例如:
bool condition = false;
int x;
if (condition)
{
x = 0;
}
if (!condition)
{
x = 1;
}
Console.WriteLine(x); // Error
这里即使 我们 知道那些 if
语句体中的一个将被输入,编译器不会 - 所以 x
不是' t肯定在最后赋值。
明确赋值的规则在 C# 5 规范的第 5.3 节中。
请注意,各种 类 变量(例如静态字段和 类 的实例字段)被视为 "initially assigned" - 但它们具有明确指定的默认值,因此仍然那里没有未定义的行为。