统一C#(单声道)枚举错误
我正在定义此代码:统一C#(单声道)枚举错误,c#,enums,mono,unity3d,C#,Enums,Mono,Unity3d,我正在定义此代码: public enum ModelType { R4, W6, W8, W9, X9 } 我在另一个脚本中使用这个函数: public void RequestModel(ModelType type, Size size) { Debug.Log("Requesting " + type.ToString() + " at size " + size.ToString()); } 输出结果是: Requesting 9 a
public enum ModelType {
R4,
W6,
W8,
W9,
X9
}
我在另一个脚本中使用这个函数:
public void RequestModel(ModelType type, Size size) {
Debug.Log("Requesting " + type.ToString() + " at size " + size.ToString());
}
输出结果是:
Requesting 9 at size 4
如果我在中更改代码
Debug.Log("Requesting " + (int)type + " at size " + size.ToString());
我会得到同样的结果。
有人知道发生了什么吗
我必须说,我第一次编写枚举时,它是这样的:
public enum ModelType {
EX1,
EX2,
EX3,
EX4,
EX5,
EX6,
EX7,
R4,
W6,
W8,
W9,
X9
}
但我摆脱了前男友,因为我不再需要他们了
我还尝试再次添加前男友,得到了以下结果:
Requesting W8 at size 4 // if I use ToString()
Requesting 9 at size 4 // to print the enum value
没关系
我真的不知道该怎么办。
我尝试重新导入所有内容,重新启动Unity和Visual Studio,但如果我删除了这些前男友,一切都将无法正常工作
有什么想法吗
编辑:
抱歉,伙计,我忘了在代码中提到,我将函数调用为
RequestModel(ModelType.W8, Size._4);
已经描述了wierd结果。使用“EX”选项后,W8
将映射到值9。当您删除它们时,它现在映射到2。如果从值序列化为9的某个对象加载ModelType
,这将解释差异-type
实际上是9,它不再存在于枚举中,因此ToString
将打印数值
我建议修复枚举以显式指定值,因为这将使其向后兼容
public enum ModelType
{
R4 = 7,
W6 = 8,
W8 = 9,
W9 = 10,
X9 = 11
}
我发现了问题:在初始化方法中有一个已声明但未初始化的变量:
ModelType currentModel;
我不知道是什么原因,但该变量只是得到了奇怪的值9(对应于W8枚举的旧值),并且在问题中描述的函数调用之前解析了初始化方法
我通过初始化变量解决了这个问题
谢谢大家!!!:) 你的错误到底是什么?是的,我不明白你认为你的问题是什么。问题是,由于枚举是这样定义的,如果我使用这样的函数:“RequestModel(ModelType.W8,Size._4)”,而不是返回正确的值,我得到了问题中提到的9。这将解决问题。谢谢我仍在试图理解这种行为的原因,以及为什么不能简单地通过更改枚举来修复它。删除EXes值将需要更改以前使用它们的所有代码(如switch或if),而且我在代码中从未使用过枚举的int值。奇怪…@Apache81如果你保存了值并加载了它,它可以解释你为什么会出现这种问题。