2014-11-12 25 views
7

değerleri:Döngü VE C# enum Verilen

public enum stuffEnum: int 
{ 
    New = 0, 
    Old = 1, 
    Fresh = 2 
} 

nasıl tek döngüde anahtar ve değerini hem kopyalayabilir bir şekilde içinden döngü? gibi bir şey: onların adı özellikleri "Yeni", "Eski" ve "Fresh", ve Numarası özellikleri 0, 1 ve 2 olarak ayarlanmış olarak ayarlanmış olan

foreach(var item in stuffEnum) 
{ 
    NewObject thing = new NewObject{ 
     Name = item.Key, 
     Number = item.Value 
    } 
} 

Yani, 3 nesnelerle sona ereceğini.

Bunu nasıl yaparım?

+0

http://stackoverflow.com/questions/972307/can-you-loop-through-all-enum-values ​​ –

+0

edilen tek elemanları (ya da sadece şifreler) ile bir enum göstermektedir. Sayımın anahtar/değer çiftleri var ve bu nedenle farklı. – ohyeah

+3

@BasR. Hayır, farklı değil, sadece değerleri açıkça tanımlarsınız. enum değerinizi 'int 'değerine çevirmek size değeri verecektir. – Rotem

cevap

10

yılında

List<NewObject> stuff = Enum.GetValues(typeof(stuffEnum)).Cast<stuffEnum>() 
    .Select(s => new NewObject { Name = s.ToString(), Number = (int) s }) 
    .ToList(); 
7

Sen (hemen hemen her zaman) LINQ kullanabilirsiniz:

Name: New, Value: 0 
Name: Old, Value: 1 
Name: Fresh, Value: 2 
+1

Diğer cevaplarla karşılaştırıldığında, cevabınızın (a) birincisi olması, (b) okunması kolay, (c) yürütmek için hızlı olması, (d) öğrenmesi gereken en fazla sayıda farklı anahtar kelimeyi kullanmanın alıştırmasıdır. Şu anki bahisim (d) ama belki de yanıldım ve söylenmeyen bir şey var mı (e) almadım? – xmojmr

+1

@xmojmr: (b) okunması kolay ve (e) LINQ kullanan bazı kombinasyonları tahmin edeceğim. Birçok kişi LINQ okumayı çok kolay buluyor. Dahası, bir dokunma avantajı var. LINQ'yi bilen herkes, Tim'in kullandığı tüm uzantı yöntemlerine aşina olmalıdır; bu, diğer cevapların gerçekten kullanmadığı (gerçekten de, bu ve lambdalar). – Brian

+0

@Brian Eksiktim (e) LINQ'a ibadet etmeli. Bu kod, "foreach" eksik, bu yüzden en uzun süredir ve MSIL komutlarının çoğunu üretiyor (.NET Framework LINQ'un birkaç kez yaptığı gibi hata ayıkladı) alan verimliliği veya zaman verimliliği eklemiyor ve en yoğun whitespaces) bu yüzden okumayı yavaşlatır. Bu stili başka bir şekilde kullanmanın gizli bir faydası olup olmadığını merak ediyordum. Ama ben sizin bir noktanız olsun, bu bir tat meselesidir ve yorumum pratik olarak anlamsızdır ve OP'nin sorusu yanıtlanmıştır. – xmojmr

3
foreach (var enumValue in Enum.GetValues(typeof(StuffEnum))) 
{ 
    Console.WriteLine("Name: {0}, Value: {1}", enumValue, (int)enumValue); 
} 

sonuç Enum sınıfı aradığınız Yöntemleri vardır.

foreach(int i in Enum.GetValues(typeof(stuff))) 
{ 
    String name = Enum.GetName(typeof(stuff), i); 
    NewObject thing = new NewObject 
    { 
     Name = name, 
     Number = i 
    }; 
}