Unity的C#编译器的一个BUG:Object Initializer错误

假设有如下代码:

using System;
 
class A
{
 public int i = 1;
 public int j = 2;
}
public class Program
{ 
 public static void Main()
 {
 A a = new A {i = 0, j = 0};
 Console.WriteLine("a.i = {0}, a.j = {1}", a.i, a.j);
 }
}


在Visual Studio或者Mono Developer中运行,输出为:

a.i = 0, a.j = 0

但同样的代码,在Unity中运行,会输出:

a.i = 1, a.j = 2

经研究, 发现这是一个Unity的Bug:使用成员变量所属类型的默认值初始化成员变量,会被Unity的编译器优化掉(可查看IL代码确认这一点)。比如初始化int类型为0,bool类型为true,引用类型为null,都是无效的。

关于此BUG的官方链接:http://issuetracker.unity3d.com/issues/object-member-initializers-in-c-number-scripts-ignores-values-that-are-same-default-value-of-that-type

阅读:19

发表回复