如何获取枚举的基础值

Geo*_*uer 14 .net c# enums

我声明了以下枚举:

 public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' }
Run Code Online (Sandbox Code Playgroud)

如何从TransactionTypeCode.Shipment获取值'S'或从TransactionTypeCode.Receipt获取'R'?

简单地做TransactionTypeCode.ToString()会给出一个Enum名称为"Shipment"或"Receipt"的字符串,因此它不会切断芥末.

小智 30

您必须检查枚举的基础类型,然后转换为正确的类型:

public enum SuperTasks : int
    {
        Sleep = 5,
        Walk = 7,
        Run = 9
    }

    private void btnTestEnumWithReflection_Click(object sender, EventArgs e)
    {
        SuperTasks task = SuperTasks.Walk;
        Type underlyingType = Enum.GetUnderlyingType(task.GetType());
        object value = Convert.ChangeType(task, underlyingType); // x will be int
    }    
Run Code Online (Sandbox Code Playgroud)

  • +1这是我需要自动(通过反射)从实体对象创建SP参数值列表的最后一步.我无法将枚举保存到数据库中,因此我保存了基础值. (2认同)

J D*_*nal -3

将此标记为不正确,但我无法删除它。

尝试这个:

string value = (string)TransactionTypeCode.Shipment;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案在各个层面上都是绝对错误的。从它无法编译的事实开始,然后继续了解枚举不是字符串,字符不是字符串,并且枚举的基础类型不是(也不可能是)字符串。 (9认同)
  • @GeorgeMauer 你的枚举的“底层类型”仍然是“int”,所以你的定义实际上是:“enum TransactionTypeCode { Shipment = 83,Receipt = 82,}”。由于某种原因,存在从“char”到“int”的隐式转换。枚举的唯一“问题”(可能不是问题)是“default(TransactionTypeCode)”没有名称,因为没有成员等于 0(或“\0”)。 (3认同)