【问题标题】:c# enum constants map to unique integer valuesc# 枚举常量映射到唯一的整数值
【发布时间】:2012-05-09 16:56:27
【问题描述】:

在 c# 中有什么方法可以确保枚举常量映射到唯一的整数值。

public enum Color
{
None =0,
red = 1,
blue= 2,
white = 3
}

如果我确实将“白色从 3 更改为 2”的数值,我应该会得到编译错误。

在我的项目中,我将 DB 中的枚举整数值保存为常量。 我需要枚举中的约束,例如有人在枚举中添加新常量(例如黑色)。用户必须提供具有枚举常量的唯一数值。

谢谢

【问题讨论】:

  • 你可以省略显式的值规范,让编译器确定它们吗?
  • 另外,您使用的是 C# 4.0 还是更高版本?如果是这样,您可以利用code contracts 来模拟编译时静态断言。

标签: c# enums


【解决方案1】:

最好不要在enum 定义中显式设置值。在 enum 定义中添加评论,告诉任何添加到它的人,以确保他们只添加到末尾。

例如:

public enum Color
{
    None,
    red,
    blue,
    white,
    // **NEW ENTRIES MUST ONLY BE ADDED AT THE END OF THE ENUM**
}

或者使用内置的Color 结构及其ToArgb( ) 方法。或者确实是 KnownColor 枚举。

【讨论】:

  • 我会明确设置值并且还会添加您的评论。以防万一... ;-)
  • @UweKeim:以防万一?编译器停止正常工作? :)
  • 万一有人还在中间插入,那么至少我的数据库值仍然有效。想象一个包含多个屏幕高度条目的枚举;可能看不到底部的提示。为了避免在顶部插入提示,我会(并且确实)更喜欢显式地编写整数值。
  • 是的,我更愿意明确地分配整数值,我的脑海里也有 Uwe Keim 刚才问的同样的问题。因为枚举现在有超过 100 个值,而且肯定会增加..
  • 另一个解决方案(在运行时)是使用反射来遍历 enum 常量并确保它们是唯一的。这可以在启动时完成,如果有任何重复,则可以将其轰炸。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2019-08-02
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多