繁体   English   中英

Unity C#(Mono)枚举错误

[英]Unity C# (Mono) enum fault

我正在定义此代码:

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);

已经描述了更奇怪的结果。

使用“ EX”选项后, W8将映射到值9。将它们删除后,现在将映射到2。如果您从序列号为9的值中加载ModelType type ,它将说明差异- type实际上是9,在您的枚举中不再存在,因此ToString将打印数字值。

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

public enum ModelType 
{
    R4 = 7,
    W6 = 8,
    W8 = 9,
    W9 = 10,
    X9 = 11
}

我发现了问题:在初始化方法中,有一个声明的BUT NOT INITIALIZED变量:

ModelType currentModel;

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

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

谢谢大家! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM