16

次の列挙型を宣言しています。

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

TransactionTypeCode.Shipment から値「S」または TransactionTypeCode.Receipt から値「R」を取得するにはどうすればよいですか?

単純に TransactionTypeCode.ToString() を実行すると、Enum 名 "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 ですが、何らかの理由でからcharへの暗黙的な変換があるだけです。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);

2 番目のものはボクシングを引き起こすため、パフォーマンスが低下するはずです。だから少し良いかもしれません

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 に答える
-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 に答える