2016-06-17 11 views
7

vs enum Casting? Bu sadece bir stil meselesi mi? MSDNGeçenlerde bu <em>stilini</em> kullanıyordum bir proje gördüm Enum.ToObject

:

Bu dönüştürme yöntemi nesne türü bir değer verir. Daha sonra yayınlayabilir veya enumType türünde bir nesneye dönüştürebilirsiniz.

https://msdn.microsoft.com/en-us/library/ksbe1e7h(v=vs.110).aspx

MSDN ben ToObject() çağırmalıdır ve sonra yayınlayabileceğim söylüyor geliyor bana. Ama kafam karıştı, çünkü bu yöntemi aramadan yapabileceğimi biliyorum. ToObject() 'in amacı nedir? Basit bir dökümün başarmadığı şey nedir?

+0

Kod mantıklı değil. Bir numarayı bir numaraya çevirebilirsiniz, ancak bir dizi numara içermez. Sıfır için Haftanın Günü, DayOfWeek.Sunday sıfır numarası olmamalıdır. – jdweng

+0

Açıkça ilk cümlede kodlama tarzı olduğunu belirttim. Tabii ki kod anlam ifade etmiyor. Sadece göstermek içindi. Enum.ToObject() 'nin amacı nedir diye soruyorum. Basit bir dökümün başarmadığı şey nedir? – HelloWorld

+1

Hiçbir fikir, ancak bu yöntemin .NET 1.1'de olduğu gerçeği bir ipucu verebilir. O günlerde artık gerçekten kullanılmaması gereken bir sürü şey var (size ArrayList'e bakarak) – BradleyDotNET

cevap

6

Çoğu durumda basit döküm yeterlidir.

Ancak bazen yalnızca çalışma zamanında yazılır. Oyuna Enum.ToObject geliyor. Dinamik olarak enum değerlerini (veya enum değerlerine eklenmiş meta veriler (öznitelikler)) almanız gerektiğinde durumlarda kullanılabilir. İşte bir örnek:

enum Color { Red = 1, Green, Blue } 
enum Theme { Dark = 1, Light, NotSure } 

public static void Main(string[] args) 
{ 
    var elements = new[] 
    { 
     new { Value = 1, Type = typeof(Color) }, 
     new { Value = 2, Type = typeof(Theme) }, 
     new { Value = 3, Type = typeof(Color) }, 
     new { Value = 1, Type = typeof(Theme) }, 
     new { Value = 2, Type = typeof(Color) }, 
    }; 

    foreach (var element in elements) 
    { 
     var enumValue = Enum.ToObject(element.Type, element.Value); 
     Console.WriteLine($"{element.Type.Name}({element.Value}) = {enumValue}"); 
    } 
} 

Çıktı geçerli:

Color(1) = Red 
Theme(2) = Light 
Color(3) = Blue 
Theme(1) = Dark 
Color(2) = Green 

More info on enum casting

İlgili konular