【问题标题】:Enum duplicate values gives duplicate names [duplicate]枚举重复值给出重复的名称[重复]
【发布时间】:2015-11-25 03:38:58
【问题描述】:

在开始实现枚举重复值的逻辑之前,我在这里阅读了几个问题,但后来我遇到了以下问题:

我有以下枚举:

public enum Features
{
    X1= 3,
    X2= 3,
    X3= 6,
    X4= 6,
    X5= 6,
    X6= 6,
    X7= 10,
    X8= 10,
}

之后我尝试创建一个这样的列表:

var features = new List<Features>(){X1,X2,X3,X5,X6,X7,X8};

当我在调试模式下查看列表时,列表包含以下枚举:

X1,X1,X3,X3,X3,X7,X7

为什么会发生这种情况,它是否隐式调用 GetName() ? 这个问题有解决办法吗?

【问题讨论】:

  • 问题是:你为什么要做这样的事情?枚举是不同元素/字符串的列表,它们也是根据一组不同的整数(默认情况下,它们的位置)定义的。让两个元素与同一个整数相关联会违背这样的想法。如果您想将一组字符串与一组整数(可能重复也可能不重复)相关联,您应该使用不同的方法;例如:Dictionary&lt;string, int&gt;.
  • 你基本上是在尝试从多对一关系,并试图逆向工程你的“一”值(即 6)并找出它来自哪个“多”(即X3、X4、X5 或 X6)。你可以看到为什么这会是一个问题。这就像把你的手机扔进一堆看似相同的手机中,希望你每次都能抓住正确的那个。
  • 我知道这里所说的所有内容,但我决定使用这种方式而不是字典,因为它更易于使用且更具可读性。我首先尝试阅读它并阅读文档中没有任何内容明确说明您不能有重复的值。所以我就去了,但之后没有找到进一步的帮助
  • @M.kazemAkhgary: “当您执行 list.Add(X2) 时,将添加项目 X1” -- 虽然我认为在技术上是正确的,但这是一种非常令人困惑的方式查看它,因为您暗示项目X2not 添加的。不是添加了一个枚举名称或另一个枚举名称。而是添加的实际上是 value,并且名称和值之间没有一对一的映射。

标签: c# enums duplicates


【解决方案1】:

我认为没有使用枚举数的好方法,因为枚举是封装整数的别名。

为什么用不同的别名来封装同一个数字?

https://msdn.microsoft.com/en-us/library/sbbt4032.aspx

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2016-03-05
    • 2012-08-11
    相关资源
    最近更新 更多