我正在这里开发一款游戏,并发现了这个相当有趣的错误。假设你有这个枚举:
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,
Weapon,
Tools,
Written,
Misc
};
那么第一个实例的类型将是,正如预期的那样,食物。第二个实例的类型也是正确的。
是什么导致了这种行为?简而言之,在构造函数中将类型设置为枚举的第一个值的所有实例实际上将返回到它们在 BaseItem 定义中的值。在第一个枚举值之前添加一个额外的值显然可以解决问题;但这是错误的,所以我想知道是什么导致了这个问题。
谢谢!
--- 稍后编辑 --- 如果这有帮助:不对 BaseItem 内的“Type”字段进行任何初始化,只留下大括号构造函数进行初始化,一切正常,无需向枚举添加“Nothing”值.
为此事道歉; 经过更多的挖掘,这似乎是一个仅限 Unity 的错误。其他一些人也遇到过。我已经解决了这个问题;每个人都得到我的投票,我会添加我自己的答案;也许其他一些 Unity 用户会找到它。非常感谢您的帮助和兴趣!