2016-03-21 13 views
0

Bu nedenle, bir Enum türünde hem tamsayı hem de karakter türlerini kullanmanın kabul edilebilir bir uygulama veya kötü bir uygulama olup olmadığını merak ediyorum. Örneğin, şu anda bir ödeme işleme satıcısı sistemi ile çalışıyorum. Sabun isteğimizi arayabilir ve 1 ila 25 arasında herhangi bir yerde ödeme türleri için kimlik gönderebilir ve C, M ve O gibi karakterleri gönderebilir. Kodu okurken netlik sağlamak için bir enum kullanmak istedim, ancak bir problemim var. Bunun için de bir anahtar dava açmak istedim. Bu, bu işlem için kötü bir uygulama mı, aynı zamanda bunu bir anahtarda güvenle kullanabilir miyim yoksa sadece bir tane yapmalı mıyım ve yanlış döküm işlemek için ayrıştırmayı denemeliyim? Enum değerleriEnum değerlerini Chars ve tamsayı türlerini C# anahtarında bir anahtar deyimiyle kullanma #

Örnek aşağıdaki gibi olacaktır:

onlar kaputun altında sayısal türleridir beri gülünç uygulama sayımları için Char üyelerini kullanmak gibi
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

Neden anahtar kayıdı kullanmaya ilişkin endişeleriniz var? Etiketi veya enum değerini kullanabilirsiniz. – ryanyuyu

+1

Bu, '(PaymentTypeEnum) '9'' yerine' (PaymentTypeEnum) 9' kullanılırsa, bu hataya yol açabilir. Bir arama yöntemini veya "char" türünü açık yapan bir sözlük tanımlamayı tercih ederim. – Douglas

+0

Bu, "25" tutarında bir ödeme türü kimliği ile nasıl çalışır? –

cevap

1

görünüyor.

Örneğinizin nasıl derlendiğini görmek ister misiniz?

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

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

Bir soyutlama düzeyini kaçırıyor gibi görünüyorsunuz. Eğer her numaralama üyesini temsil etmek karakterleri gerekirse ödeme türlerini temsil etmelidir enum, o zaman, zaten bir enum biliyorum ... Enum ile enum soneki yok, bir sözlük

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

kullanın!

+1

Ayrıca sözlük kullanmayı düşünüyorum. Teşekkürler, yapacağım ve bu yüzden sordum. – Casey

+0

Ayrıca, bu mevcut şirket Değişken isminde belirtilen tüm türleri istiyor. Biliyorum.. – Casey

İlgili konular