我在这里开发游戏,发现这个有趣的错误.假设你有这个枚举:
public enum ItemType { Food,Weapon,Tools,Written,Misc };
一个基类
public class BaseItem { public string Name = "Default Name"; public ItemType Type = ItemType.Misc; }
以及它的两个实例:
Ins1 = new BaseItem { Name = "Something",Type = ItemType.Food }; Ins2 = new BaseItem { Name = "Something too",Type = ItemType.Tools }
这就是我发生的事情:第一个实例的类型将保留为基类中的预初始化,即使我在其构造函数中指定我希望类型为Food.
第二个实例的类型将正确设置为工具.
public enum ItemType { Nothing,Food,Misc };
那么第一个实例的类型就像预期的那样,食物.第二个实例的类型也是正确的.
什么可能导致这种行为?简而言之,所有其类型已在构造函数中设置为枚举的第一个值的实例实际上将返回到它们在BaseItem定义中具有的值.
在第一个枚举值之前添加额外的值可以解决问题,显然;但这是错的,所以我想知道可能导致这个问题的原因.
谢谢!
—后来编辑—
如果这有帮助:不对BaseItem中的“Type”字段进行任何初始化,只留下大括号构造函数进行初始化,一切正常,而不向枚举添加“Nothing”值.
为此表示歉意;经过一些挖掘,似乎它只是一个Unity的bug.其他一些人也遇到过它.我解决了这个问题;每个人都得到我的投票,我会添加自己的答案;也许其他一些Unity用户会找到它.非常感谢您的帮助和兴趣!