gpt4 book ai didi

c# - 未分配的局部变量是否保证 CS0165 C# 编译器错误?

转载 作者:行者123 更新时间:2023-11-30 15:16:51 27 4
gpt4 key购买 nike

在这样的代码中:

int val;

if (something())
val = 10;

val++; // Error CS0165 Use of unassigned local variable

当使用局部变量时,我收到了 CS0165 错误消息,而它之前可能没有被肯定地初始化过。

在 C++ 世界中,这种情况是未定义行为 类情况,这意味着任何事情都是允许的。所以可能存在编译器错误,可能存在编译器警告,可能存在运行时错误,可能代码只是使用了当时内存中的任何内容,祝你好运。

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不是' 绝对在最后分配。

明确赋值的规则在 C# 5 规范的第 5.3 节中。

请注意,各种类别的变量(例如静态字段和类的实例字段)被视为“初始分配” - 但它们具有明确指定的默认值,因此仍然没有未定义的行为。

关于c# - 未分配的局部变量是否保证 CS0165 C# 编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48422638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com