2016-03-21 6 views
0

Also habe ich mich gefragt, ob es akzeptabel oder schlechte Praxis ist, sowohl Integer als auch Zeichentypen innerhalb eines Enum-Typs zu verwenden. Zum Beispiel arbeite ich zur Zeit mit einem System zur Zahlungsabwicklung. Sie können unsere Soap-Anfrage aufrufen und IDs für Zahlungsarten zwischen 1 und 25 senden und auch Zeichen wie C, M und O senden. Ich wollte eine Eindeutigkeit beim Lesen des Codes verwenden, aber ein Problem, das ich habe ist, dass ich auch einen Schalter dafür verklagen wollte. Ist das eine schlechte Übung im Umgang damit, kann ich das auch sicher in einem Switch handhaben oder sollte ich einfach ein if else machen, und versuche pars für den Umgang mit falschem Casting?Verwenden von Enum-Werten mit Chars und Integer-Typen in einer Switch-Anweisung in C#

Beispiel für Enum-Werte wäre die folgende:

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

Warum haben Sie Bedenken, eine switch-Anweisung zu verwenden? Sie können entweder die Bezeichnung oder den Wert der Aufzählung verwenden. – ryanyuyu

+1

Dies kann zu kleinen Fehlern führen, wenn man '(PaymentTypeEnum) 9' statt' (PaymentTypeEnum) '9'' verwendet. Ich würde bevorzugen, eine Nachschlage-Methode oder ein Wörterbuch zu definieren, das den Typ "char" explizit macht. – Douglas

+0

Wie würde das mit einer Zahlungstyp-ID von 25 funktionieren? –

Antwort

1

Es scheint, wie lächerlich Praxis char Mitglieder für Aufzählungen zu verwenden, da sie numerische Typen unter der Haube sind.

Möchten Sie sehen, wie Ihr Beispiel kompiliert?

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

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

Sie scheinen eine Ebene der Abstraktion zu fehlen. Ihre Enum sollte Zahlungsarten darstellen, dann, wenn Sie Zeichen müssen jedes Enum Mitglied darstellen, verwenden Sie einen Wörterbuch

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(...); 
} 

Auch, Suffix nicht Ihre Enum mit Enum ... Sie bereits wissen, dass es eine Enumeration!

+1

Iw als auch über die Verwendung von Wörterbuch nachdenken. Danke, ich werde es tun, und darum habe ich gefragt. – Casey

+0

Auch diese aktuelle Firma will alle Typen in Variablenname angegeben. Ich kenne.. – Casey