我是一名有用的助手,可以翻译文本。
我正在处理一个游戏项目,发现了一个相当有趣的 Bug。假设你有这样一个枚举:
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。 第二个实例的类型将正确地设置为Tools。
如果我在Food之前添加了一个新的枚举值,例如:
public enum ItemType
{
Nothing,
Food,
Weapon,
Tools,
Written,
Misc
};
那么第一个实例的类型应该是食品,这是预期的。第二个实例的类型也是正确的。是什么导致了这种行为呢?简单来说,所有在构造函数中将Type设置为枚举的第一个值的实例实际上会回到它们在BaseItem定义中的值。在第一个枚举值之前添加一个额外的值似乎解决了问题,但这是错误的,因此我想知道是什么导致了这个问题。谢谢! --- 后续编辑 --- 如果有帮助的话:不对BaseItem内部的“Type”字段进行任何初始化,只留下大括号构造函数进行初始化,而没有添加“Nothing”值到枚举中,一切都可以正常运行。很抱歉,经过更多挖掘,似乎这是一个仅存在于Unity的错误。其他人也遇到了这个问题。我已经解决了这个问题,每个人都得到了我的赞成票,我会添加自己的答案,也许其他Unity用户会找到它。非常感谢您的帮助和支持!
public
),因此这不是问题。 - Jeppe Stig Nielsen