2012-01-02 53 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(); 

    }