16

我声明了以下枚举:

 public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' }

如何从 TransactionTypeCode.Shipment 中获取值“S”或从 TransactionTypeCode.Receipt 中获取值“R”?

简单地执行 TransactionTypeCode.ToString() 会给出一个枚举名称“Shipment”或“Receipt”的字符串,因此它不会减少芥末。

4

7 回答 7

36

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

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
    }    
于 2010-02-18T22:04:19.580 回答
1

我相信 Enum.GetValues() 是您正在寻找的。

于 2008-09-18T21:55:37.813 回答
1

您的枚举的基础类型仍然是 int,只是由于某种原因存在从charto的隐式转换。int你的枚举相当于

TransactionTypeCode { Shipment = 83, Receipt = 82, }

另请注意,可能出于某种语义原因,它enum可以具有任何整数类型作为基础类型,除了。char这是不可能的:

TransactionTypeCode : char { Shipment = 'S', Receipt = 'R', }

char恢复值,您可以使用强制转换。

var value = (char)TransactionTypeCode.Shipment;

// or to make it more explicit:
var value = Convert.ToChar(TransactionTypeCode.Shipment);

第二个导致拳击,因此应该表现更糟。所以可能稍微好一点的是

var value = Convert.ToChar((int)TransactionTypeCode.Shipment);

但丑陋。考虑到性能/可读性的权衡,我更喜欢第一个(演员)版本..

于 2013-12-01T12:47:43.113 回答
0

我正在寻找那个,我得到了解决方案使用转换类

int value = Convert.ToInt32(TransactionTypeCode.Shipment);

看看它有多容易

于 2009-04-01T03:20:51.270 回答
0

枚举的基础值必须是数字。如果基础值的类型已知,则简单转换返回枚举的给定实例的基础值。

enum myEnum : byte {Some = 1, SomeMore, Alot, TooMuch};
myEnum HowMuch = myEnum.Alot;
Console.Writeline("How much: {0}", (byte)HowMuch);

输出:多少:3

或(更接近原始问题)

enum myFlags:int {None='N',Alittle='A',Some='S',Somemore='M',Alot='L'};
myFlags howMuch = myFlags.Some;
Console.WriteLine("How much: {0}", (char)howMuch);
//If you cast as int you get the ASCII value not the character.

这对我来说是一个反复出现的问题,我总是忘记简单的演员阵容会给你带来价值。

于 2015-06-25T11:08:49.870 回答
-1

这就是我通常设置我的枚举的方式:

public enum TransactionTypeCode {

  Shipment("S"),Receipt ("R");

  private final String val;

  TransactionTypeCode(String val){
    this.val = val;
  }

  public String getTypeCode(){
    return val;
  }
}

System.out.println(TransactionTypeCode.Shipment.getTypeCode());
于 2008-09-23T20:11:47.777 回答
-2

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

试试这个:

string value = (string)TransactionTypeCode.Shipment;
于 2008-09-18T21:55:53.897 回答