【问题标题】:Unity C# (Mono) enum faultUnity C#(单声道)枚举错误
【发布时间】:2013-08-30 19:47:19
【问题描述】:

我正在定义这段代码:

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

已经描述了奇怪的结果。

【问题讨论】:

  • 你的错误到底是什么?
  • 是的,我不明白你认为你的问题是什么。
  • 问题在于枚举的定义是这样的,如果我使用这样的函数:'RequestModel(ModelType.W8, Size._4)' 而不是返回正确的值,我得到这个 9问题中提到。

标签: c# enums mono unity3d


【解决方案1】:

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

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

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

【讨论】:

  • 好吧,这将解决问题。谢谢。我仍在尝试了解这种行为的原因,以及为什么不能简单地通过更改枚举来修复它。删除 EXes 值将需要更改以前使用它们的所有代码(如 switch 或 if),并且我从未在代码中使用枚举的 int 值。奇怪...
  • @Apache81 如果您保存并加载了该值,它可以解释您遇到此类问题的原因。
【解决方案2】:

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

ModelType currentModel;

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

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

谢谢大家!!! :)

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多