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

锋利的牙齿

在这样的代码中:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么编译器会引发错误CS0165:使用未分配的局部变量?

错误 CS0165 使用未分配的局部变量“json”

为什么try / finalize块不会抛出CS0165:使用未分配的局部变量编译错误?

C#编译器-未分配的字段和局部变量初始值

编译器错误地指示使用未分配的局部变量错误

如何修复XmlReader切换案例中的“错误CS0165:使用未分配的本地变量”

C#未分配的局部变量?

编译器错误取决于方法签名中的参数位置。使用未分配的局部变量

错误“使用未分配的局部变量”?

F#编译器是否以与C#编译器相同的方式支持foreach优化

C#编译器会优化掉变量吗?

C#编译器是否在优化可空类型?

C#使用未分配的局部变量

C#使用未分配的局部变量异常

使用未分配的局部变量c#

构造函数可访问性C#编译器错误CS0122与CS1729

在C#中为什么我可以将接口转换为任何类型而没有编译器错误

抑制“使用未分配的局部变量”错误?

是否有C C ++ C#编译器可编译为机器代码

是否可以使用.NET Core Roslyn编译器编译单个C#代码文件?

是否可以使用C#编译器添加PostSharp进行动态编译

C#Winform使用未分配的局部变量

错误在C#中使用未分配的局部变量(开关)

C#类对象错误为未分配的局部变量

编译器错误变量声明

C#编译器可以编译VB.Net代码吗?

是否应该在Visual Studio C#编译器中将此列表初始化器行为报告为错误?

局部constexpr变量引入了编译器错误

C# 编译器错误:Assets\Scripts\CamraMotor.cs(13,41): error CS1526: A new expression requires (), [], or {} after type