1

我正在定义这段代码:

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
}

但我摆脱了 EX,因为我不再需要它们。

我还尝试再次添加 EX,并得到了输出:

Requesting W8 at size 4  // if I use ToString()
Requesting 9 at size 4   // to print the enum value

没关系。

我真的不知道该怎么办。我尝试重新导入所有内容,重新启动 Unity 和 Visual Studio,但如果我删除 EXes,则无法正常工作。

有任何想法吗?

编辑:对不起,我忘了在代码中提到我将函数调用为

RequestModel(ModelType.W8, Size._4);

已经描述了奇怪的结果。

4

2 回答 2

2

使用“EX”选项,W8将映射到值 9。当您删除它们时,它现在映射到 2。如果您ModelType type从值序列化为 9 的东西加载,它将解释差异 -type会实际上是 9,它不再存在于您的枚举中,因此ToString将打印数值。

我建议修复您的枚举以明确指定值,因为这将使其向后兼容。

public enum ModelType 
{
    R4 = 7,
    W6 = 8,
    W8 = 9,
    W9 = 10,
    X9 = 11
}
于 2013-08-29T17:13:06.590 回答
0

我发现了问题:在初始化方法中有一个声明但未初始化的变量:

ModelType currentModel;

我不知道是什么原因,但该变量刚刚获得了奇怪的值 9(对应于 W8 枚举的旧值),并且在问题中描述的函数调用之前解析了初始化方法。

我通过初始化变量解决了这个问题。

谢谢大家!!!:)

于 2013-08-30T11:47:19.463 回答