.NET中用户创建的结构和框架结构之间的差异

时间:2010-11-24 15:26:28

标签: c# .net struct value-type

为什么C#编译器不允许你编译它:

int a;
Console.WriteLine(a);

但允许你编译:

MyStruct a;
Console.WriteLine(a);

其中MyStruct定义为:

struct MyStruct
{

}

更新:在第一种情况下,错误是:

  

错误1使用未分配的本地   变量'a'

3 个答案:

答案 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'