以下编译成功:
struct Foo {}
void Test()
{
Foo foo;
foo.ToString();
}
Run Code Online (Sandbox Code Playgroud)
以下产生"使用未分配的局部变量"编译错误.
struct Foo
{
int i;
}
void Test()
{
Foo foo;
foo.ToString();
}
Run Code Online (Sandbox Code Playgroud)
看起来在第一种情况下,编译器做了某种推断,因为结构没有成员,所以不需要初始化它们.但我不确定这对我有意义.编译器可能强制您将foo变量初始化为new Foo().
因此,如果在C#中所有局部变量必须在访问之前初始化,为什么第一个示例编译?
C#5规范的第5.3节涵盖了这一点:
如果结构类型变量的每个实例变量都被认为是明确赋值的,则它被认为是明确赋值的.
当没有实例变量时,这是自动的情况,因此该变量被认为是明确分配的,并且可以在ToString()调用中使用.
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |