2012-01-02 30 views

回答

14

東西地方將不得不循環。你不必在你的代碼中循環使用,但是必須要做的事情。

我想不出任何副手,這將修改所有元素的列表,但使用LINQ,你可以很容易地創建一個新的List<int>

var plusThree = originalList.Select(x => x + 3).ToList(); 

或預LINQ(及略微更高效,也更List<T>特異性):

var plusThree = originalList.ConvertAll(x => x + 3); 

但是這兩個被循環幕後。

您可能會創建一個突出IList<T>實現其懶洋洋地應用的投影(或者可能是雙射,如果你想成爲真正看中的)......但是這將是顯著大量的工作。

+0

對於真正的「預LINQ」你不得不溝拉姆達。 – 2012-01-02 10:57:06

+0

@HenkHolterman:不行 - 只要你有C#3+編譯器,你仍然可以在使用.NET 2時使用lambda表達式。希望OP不會繼續使用Visual Studio 2005 :) – 2012-01-02 11:13:51

4

你必須改變列表本身的值,所以在for循環中沒有其他辦法,除非你允許創建一個新列表,那麼你可以使用Linq(它將循環它是自己的代碼)。

for(int i = 0; i < list.Count; i++) list[i]+=3;

0

另一種方式來做到這一點(ofcourse,感覺就像寫foreach循環,而無需實際寫它)

static void Main(string[] args) 
    { 

     List<int> list = new List<int>(); 

     list.Add(1); 
     list.Add(2); 
     list.Add(3); 
     list.Add(4); 
     list.Add(5); 



     int k = 0; 
     list.ForEach(delegate(int i) { list[k++] = i+3; }); 



     foreach (var item in list) 
     { 
      Console.WriteLine(item.ToString()); 
     } 

     Console.ReadKey(); 

    } 
相關問題