2011-05-30 106 views
4

我們只需說我想遍歷string[][],使用匿名類型追加一個值並對結果執行通用的ForEach-擴展方法(輝煌的例子,我知道,但我想你會得到它的精神!)。使用匿名類型調用通用方法(C#)

這裏是我的代碼:

//attrs = some string[][] 
attrs.Select(item => new { name = HttpContext.GetGlobalResourceObject("Global", item[0].Remove(0, 7)), value = item[1] }) 
      .ForEach</*????*/>(/*do stuff*/); 

正是我會把什麼的foreach類型參數?

這裏的ForEach樣子:

public static void ForEach<T>(this IEnumerable<T> collection, Action<T> act) 
{ 
    IEnumerator<T> enumerator = collection.GetEnumerator(); 
    while (enumerator.MoveNext()) 
     act(enumerator.Current); 
} 

回答

8

你並不需要顯式地指定類型,因爲它可以從提供的參數來推斷:

attrs.Select(item => new 
        { 
         name = HttpContext.GetGlobalResourceObject("Global", 
                 item[0].Remove(0, 7)), 
         value = item[1] 
        }) 
    .ForEach(x => x.name = "something"); 
+0

請再次閱讀我的答案。它回答你的問題。重點是:**類型推斷**。在我的例子中'x'是那個匿名類型。 – 2011-05-30 11:43:19

+1

哦,真的!謝謝,我會盡快接受。另外,明確指定類型是不可能的,對嗎? – 2011-05-30 11:45:36

+0

沒問題。你不能明確地指定它。 – 2011-05-30 11:47:13