質問
次の列挙型を宣言しました。
public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' }
TransactionTypeCode.payment から値 'S' を取得するか、TransactionTypeCode.Receipt から値 'R' を取得するにはどうすればよいですか?
TransactionTypeCode.ToString() を実行するだけで、Enum 名の文字列「発送」または「受領書」が得られるため、マスタードをカットする必要はありません。
解決
これを試して:
string value = (string)TransactionTypeCode.Shipment;
他のヒント
列挙の基になる型を確認してから、適切な型に変換する必要があります。
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
}
Enum.GetValues() があなたが探しているものであると思います。
列挙型の基になる型は依然として 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);
しかし醜い。パフォーマンスと読みやすさのトレードオフを考慮すると、私は最初の (キャスト) バージョンを好みます。
私はそれを探していました、そして私はコンバートクラスを使用してソリューションを取得します
int value = Convert.ToInt32(TransactionTypeCode.Shipment);
いかに簡単か見てみましょう
これが私が通常列挙型を設定する方法です。
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());
enum の基になる値は数値である必要があります。基礎となる値の型がわかっている場合は、単純なキャストによって列挙型の特定のインスタンスの基礎となる値が返されます。
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.
これは私にとって繰り返しの質問ですが、単純なキャストで値が得られることをいつも忘れています。