2013-02-27 26 views
8

gibi bir enumEnum ToString bir sayı

private enum TimeUnit 
{  
    Day, 
    Month, 
    Year 
} 

var Ve ben bir açıklama doldurma ediyorum görünür. Çoğu zaman bu çalışır ve belirli bir sunucuda "Gün (ler)" görüntüler, "1 (s)" olarak görüntüleniyor

Bunun nedeni nedir?

+3

Tahminim .Net'in farklı sürümleri olabilir mi? Bunu sadece unit.ToString() – Marthin

+1

ekleyerek çözebilirsiniz. Bu ekranı farklı kılan şeyi bilmek isterim. .NET sürümü ise, ne zaman değiştirildi ve neden? –

+1

@Marthin Ben muhtemelen .NET sürümüyle (soruya cevabımı koymak istemedim) string.Concat dolaylı bir ToString() neden olmalıyım diye düşünüyorum. biçimlendirme bilgisi vermeden değişiklik. – Liath

cevap

5

o da safer olma avantajına sahiptir Enum.GetName()

kullanmayı deneyin gerektirdiği için:

  • Geçirdiğiniz değer boş değil.
  • Geçirdiğiniz değer, bir sayımın temel tür olarak veya sayımın kendisinin türünde kullanabileceği türden bir türüdür. Bunu kontrol etmek için değerde GetType kullanır.
+2

'enum null olamaz, bunların çoğu şizofren güvenliktir. –

+0

fuar noktası, sadece kopyaladım ve yapıştırdım. Şimdi düzenleniyor. – happygilmore

+0

Bu düzeltmeyi teslim ettim - tabii ki doğru olup olmadığını bilmeden önce sunucuya bir dağıtım beklemek zorundayım! – Liath

0

Enum dizeleri ile optionnalyexpressed dijital numaralandırma Çünkü uygun ToString kullanılarak

+2

Evet, ancak bu, iki farklı kutunun neden ToString işlemini farklı bir şekilde yapması gerektiğini açıklamıyor. – Liath

3

Sen biçimlendirmeliyim (onları takma düşünün):

return string.Concat(unit.ToString("F"), "(s)"); 
0

MSDN diyor ki: genel biçim karakteri, "G", belirtilen sanki

Bu yöntem çalışır. Yani, bu numaralandırılmış türüne FlagsAttribute uygulanmazsa ve bu örnekte değerine eşit bir adlandırılmış sabit varsa, dönüş değeri, sabitin adını içeren bir dizedir. FlagsAttribute uygulanır ve bu örneğinin değerine eşit olan bir veya daha fazla adlandırılmış sabitin bir birleşimi varsa, dönüş değeri, sabitlerin adlarının bir sınırlayıcı ayrılmış listesini içeren bir dizedir. Aksi takdirde, dönüş değeri, bu örneğinin sayısal değerinin dize olarak temsilidir.

Yani ideal olarak durumunda sorun çıkmaması gerekir (FlagsAttribute uygulanmış ve orada değildir düşünüyor adlandırılmış bu durumda değerine eşit sabiti). Kutular arasındaki farklardan bahseder misin?

Ayrıca, açık sayılar vermeye çalışın.

private enum TimeUnit 
{  
    Day = 1, 
    Month = 2, 
    Year = 3 
} 
+1

Daha sonra açık değerler bir fark yaratmayacak. – Groo

+0

@Groo, Katılıyorum. Ancak, MSDN betimlemesine dayanarak, * durum 3'e girdiğine bakar (aksi halde, döndürme değeri, bu örneğin sayısal değerinin dize olarak temsilidir). Yani, belki de birim değişkeni enum aralığının dışında bir değere sahiptir (1 'in başına 1 olmalıdır). Sınırlı bilgi ile, bu tahmin. – publicgk