统一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如果你保存了值并加载了它,它可以解释你为什么会出现这种问题。