为什么C#编译器不允许你编译它:
int a;
Console.WriteLine(a);
但允许你编译:
MyStruct a;
Console.WriteLine(a);
其中MyStruct定义为:
struct MyStruct
{
}
更新:在第一种情况下,错误是:
错误1使用未分配的本地 变量'a'
答案 0 :(得分:11)
C#不允许从未初始化的本地人那里阅读。以下是适用于此背景的language specification摘录:
5.3明确的作业
...
考虑结构类型变量 明确分配如果每个 考虑实例变量 明确分配。
显然,由于你的结构没有字段,这不是问题;它被认为是明确分配的。向其添加字段应该会破坏构建。
有点相关的说明:
11.3.8构造函数
在所有字段之前,不能调用实例成员函数 正在构造的结构有 已被明确分配。
答案 1 :(得分:4)
这是因为int
局部变量(与int
不同,作为类或结构成员)没有默认值。示例中的struct
输出仅起作用,因为它没有成员。
讨论了here的默认值。
这样可行:
struct MyStruct
{
int c;
}
int a = new int();
MyStruct b = new MyStruct();
Console.WriteLine(a);
Console.WriteLine(b);
答案 2 :(得分:2)
编译器根本不喜欢在初始化之前使用整数的事实。
Error 5 Use of unassigned local variable 'a'