C#相同枚举名称具有多个值

3
如何为不同的值添加相同的Enum名称,类似于这样?是否有可能实现这个功能?
public enum Location
{
   A = 1,
   A = 2,
   A = 3,
   B = 4,
   B = 5  
}

更新:

我有一张数据库表,需要从中创建一个 Enum,用于表示该表的 Id。对于一些 Id,我需要分配相同的名称。因此,我需要这种实现方式。通过将 Id 作为值传递以获取 Enum 名称。


3
为什么你想要这样做? - brianestey
唯一的名称,其值可以重复。 - Lasse V. Karlsen
1
你的数据库中的PK如何会有重复? - brianestey
@Damien_The_Unbeliever,我只需要反向案例 Enum.GetName(typeof(Location), dbValue); - user1618825
那么您不需要枚举 - 您需要一个 Dictionary<int,string> - Damien_The_Unbeliever
显示剩余9条评论
4个回答

6

不,这是不可能的。枚举名称必须是唯一的。

然而,它们的可以重复,因此您可以执行相反的操作:

A = 1,
B = 2,
C = 2,
D = 1

0

正如 @Lasse 所说,这是不可能的。但是对于您的工作,您可以创建自己的 自定义类型

public class customtype
{
    public string Key { get; set; }
    public List<int> values { get; set; } 

}

谢谢,关于这个问题,我们可以直接使用Dictionary对象本身。但我只是想知道如果使用枚举会发生什么。 - user1618825
1
不能使用枚举! - Lasse V. Karlsen
1
@SSS 是的,你可以使用。但我认为你可能需要进行更多的操作。不幸的是,你不能使用“枚举”来完成它! - Mehrdad Kamelzadeh

0
这是不可能的,原因很简单:想象一下代码即可:
  int loc = (int) (Location.A);

loc 应该是多少?1、2 还是 3?不过,你可以为一个值分配别名:一个值有多个名称:

  public enum Location
  {
   A = 1,
   B = 1,
   C = 1,
   D = 2,
   E = 2,
   F = 3 
  }

如果你需要将 int 转换回枚举类型

   Location loc = (Location) 2; // <- Location.D

这将是第一个枚举值,对应着整数值(在此情况下为 Location.D)


+1,感谢您详细的解释。对于我的情况,是否有其他简单的实现方式? - user1618825

0
如果您只使用枚举的 Enum.GetName 函数将 int 转换为 string,则不需要枚举 - 您只需要一个正确初始化的 Dictionary,例如:
public static Dictionary<int,string> Location = new Dictionary<int,string>
{
  {1,"A"},
  {2,"A"},
  {3,"A"},
  {4,"B"},
  {5,"B"}
}

现在您可以直接访问Location[Id],而不必使用GetName


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接