8

以下编译成功:

struct Foo {}

void Test()
{
    Foo foo;
    foo.ToString();
}

而以下产生“使用未分配的局部变量”编译错误。

struct Foo
{
    int i;
}

void Test()
{
    Foo foo;
    foo.ToString();
}

似乎在第一种情况下,编译器做出了某种推断,即由于结构没有成员,因此不需要初始化它们。但我不确定这对我是否有意义。编译器可能会强制您将foo变量初始化为new Foo().

那么,如果在 C# 中所有局部变量都必须在访问之前进行初始化,那么为什么第一个示例会编译

4

1 回答 1

8

C# 5 规范的第 5.3 节涵盖了这一点:

如果结构类型变量的每个实例变量都被认为是明确分配的,则认为结构类型变量是明确分配的。

当没有实例变量时,自动出现这种情况,因此该变量被认为是明确分配的,并且可以在ToString()调用中使用。

于 2012-09-21T12:53:43.220 回答