2012-11-15 44 views
0

我有這樣的代碼:在c#中自動執行匿名函數的快捷方式?

(簡單枚舉它有值A,B,C ... [0,1,2],我想顯示每個循環數 - 它在最後corrosponding enum列表)。

public enum ENM 
{ 
    a,b,c 
} 


void Main() 
{ 

var e = Enumerable.Range(0,3).Select(myCounter=>new { 

      final=((Func<int,ENM>)delegate (int i) 
            { 
             return (ENM)i; 
            })(myCounter) 

}).ToList(); 

這很好,工作。

有沒有寫任何解決方案delegate(int i) {...}

p.s.當然我可以只寫(ENM)i,但問題是學習 如何寫(以不同的方式)自動執行的方法。

回答

1

爲什麼不

Enumerable.Range(0,3).Select(c=>(ENM)c).ToList() 

還是我失去了一些原因在複雜性?

var e = Enumerable.Range(0, 3).Select(myCounter => new 
{ 
    final = ((Func<int, ENM>)(
     i=>{ 
      return (ENM)i; 
      /* More code could be here */ 
     }))(myCounter) 
}).ToList(); 

大約是緊張,因爲如果你想同樣的混亂:)

+0

是啊,你錯過了最後一句:-) –

+0

的一點是,(我=>(ENM)我)不是一個匿名函數,直到你把它轉換爲Func鍵,所以你無法避免如果你想馬上執行該功能 – bradgonesurfing

+0

@RoyiNamir爲什麼編輯?這是正確的代碼。沒有人會像你一樣寫一行匿名函數? – bradgonesurfing

0

有一個在System.Enum具體方法正是這樣做,你將獲得:

var arr = Enum.GetValues(typeof(ENM)); 

爲了得到它成List<ENM>

var lst = arr.Cast<ENM>().ToList(); 
+0

你錯過了最後一句 –

+0

@RoyiNamir我錯過了什麼? – Kache

1
var e = Enum.GetNames(typeof(ENM)).Select((e, i) => new { final = e, index = i }).ToList(); 

OR

var EnumNames = Enum.GetNames(typeof(ENM)); 
var EnumValues = Enum.GetValues(typeof(ENM)).Cast<ENM>().Select(e => (int)e); 
var result = EnumNames.Zip(EnumValues, (n, v) => new { final = n, index = v }); 
+0

你錯過了最後一句話 –

相關問題