2016-03-21 3 views
0

Enum型で整数型と文字型の両方を使用することが許容されるかどうかは疑問でした。たとえば、私は現在支払い処理ベンダーシステムを使用しています。彼らは私たちの石鹸の要求を呼び出すことができ、1から25までの支払いタイプのIDを送ることができ、C、M、Oなどの文字を送信することもできます。コードを読みやすくするためにenumを使用したいと思います。私もこのためのスイッチを訴えたかったということです。これを処理するのは悪い習慣ですか?これをスイッチで安全に処理することはできますか?そうでない場合はどうしたらいいですか?列挙型の値のC#のswitch文にCharsと整数型の列挙型の値を使用する

例は以下のようになります。

internal enum PaymentTypeEnum 
{ 
    /// <summary> 
    /// Payment Type Id via Phone from ACI. Note: Int32 
    /// </summary> 
    PhonePayment_IVR = '9', 
    /// <summary> 
    /// Payment Type Id via electronic from ACI. Note: Int32 
    /// </summary> 
    eCollectPayment = '5', 
    /// <summary> 
    /// Payment Type Id for CANCEL payment. Note: Char 
    /// </summary> 
    CancelPayment = 'C', 
} 
+2

なぜswitch文を使用することに懸念がありますか?ラベルまたは列挙型の値を使用できます。 – ryanyuyu

+1

'(PaymentTypeEnum) '9'の代わりに'(PaymentTypeEnum)9'を使用すると微妙なバグが発生する可能性があります。 'char'型を明示的にするルックアップメソッドや辞書の定義を好むでしょう。 – Douglas

+0

これは、支払いタイプIDが「25」の場合、どのように機能しますか? –

答えて

1

彼らはボンネットの下の数値型であるため、列挙のためのcharのメンバーを使用するように滑稽練習のように思えます。

サンプルのコンパイル方法を確認したいですか?

//Your code... 
internal enum PaymentTypeEnum 
{ 
    PhonePayment_IVR = '9', 
    eCollectPayment = '5', 
    CancelPayment = 'C', 
} 

// Compiled... 
internal enum PaymentTypeEnum 
{ 
    PhonePayment_IVR = 57, 
    eCollectPayment = 53, 
    CancelPayment = 67 
} 

抽象度が不足しているようです。あなたは、各列挙型メンバーを表すための文字が必要な場合は、支払いの種類を表している必要がありますあなたの列挙型は、その後、あなたはすでにそれが列挙型であることを知っている...列挙型を使用して列挙型をサフィックスしていない、辞書

また
Dictionary<PaymentTypeEnum, char> types = new Dictionary<PaymentTypeEnum, char>(); 

types[PaymentTypeEnum.PhonePayment_IVR] = '9'; 
types[PaymentTypeEnum.eCollectPayment] = '5'; 
types[PaymentTypeEnum.CancelPayment] = 'C'; 

public char GetPaymentType(PaymentTypeEnum pt) 
{ 
    if(types.ContainsKey(pt)) 
    { 
     return types[pt]; 
    } 

    return default(char); // assuming (char)0 is meaningless in this context...otherwise... 

    throw new InvalidArgumentException(...); 
} 

を使用します!

+1

Iwも辞書の使用を考えています。ありがとう、私はそうするだろう、そしてそれが私が尋ねた理由です。 – Casey

+0

また、現在の会社では、変数名に記載されているすべてのタイプが必要です。知っている.. – Casey