Enum.ToString()返回错误的描述c#

时间:2014-05-14 14:48:16

标签: c# enums edifact

我们为EDI Fields提供了一个很大的Enum类,只是举一个简短的例子,枚举声明如下:

[Description("Ebene")]
Ebene,

[Description("Zaehlpunktdaten")]
Zaehlpunktdaten,

[Description("Zaehlpunkt")]
Zaehlpunkt,

嗯,当你通过EDIEnums.Zaehlpunktdaten.ToString()检索枚举时,枚举工作正常,但在其他一些项目中,它会返回错误的值。

如果我在开头添加一个新内容将完全返回下一个,在此示例中,如果我刚添加Ebene并且我想要检索Zaehlpunktdaten,则会返回Zaehlpunkt 1}}。

我们也尝试使用=0=1=2等,但它也不起作用。还有本地参考。

有关正在发生的事情的任何想法?

1 个答案:

答案 0 :(得分:1)

假设程序集A定义MyEnum。 默认情况下,每个枚举值都隐式赋值为整数“索引”,如下所示:

public enum MyEnum
{
    X = 1,
    Y = 2,
    Z = 3
}

如果程序集B中的源代码使用MyEnum.Y,则将根据索引2处的值编译该代码。

如果您现在在开头添加新项目,则索引将移位:

public enum MyEnum
{
    New = 1,
    X = 2,
    Y = 3,
    Z = 4
}

程序集B仍在引用索引2处的值,现在是X而不是Y。这是你看到的错误。 这就是为什么添加新的枚举值被认为是一个重大变化。

如果您希望枚举更改,您应该自己编号枚举值,而不是在编译程序集B之前使用隐式编号

您现在有两个选择:

  1. 可能的解决方法是在枚举结束时添加新值,以避免转移索引。 但这是一个草率的解决方法。
  2. 考虑编号枚举值现在根据该程序集重建任何项目。它可能看起来像很多工作,取决于有多少项目依赖于程序集A,但它将使您和您的同事在将来再次遇到同样的问题。