Foreach jest ładny, ale jak chcesz, to może po prostu zwykły for?
for (int i = 0; i < basket.Items.Count(); i += 2)
{
basket.Items.ElementAt(i).Name = "changed";
}
#edit nieistotne
Performance:
public class Basket
{
public string Temp { get; set; }
public List<Item> Items = new List<Item>();
}
public class Item
{
public string Name { get; set; }
public string Surname { get; set; }
}
class Program
{
const int amountOfItems = 1000000;
public static void testFor()
{
Basket basket = new Basket();
for (int i = 0; i < amountOfItems; i++)
{
basket.Items.Add(new Item { Name = "1", Surname = "test" });
}
Stopwatch stoper = new Stopwatch();
stoper.Start();
for (int i = 0; i < basket.Items.Count(); i += 2)
{
basket.Items.ElementAt(i).Name = "changed";
}
stoper.Stop();
Console.WriteLine(stoper.ElapsedMilliseconds + "ms (for loop)");
}
public static void testForeach()
{
Basket basket = new Basket();
for (int i = 0; i < amountOfItems; i++)
{
basket.Items.Add(new Item { Name = "1", Surname = "test" });
}
Stopwatch stoper = new Stopwatch();
stoper.Start();
var temp = basket.Items.Where((v, i) => i % 2 == 0).ToArray();
foreach (var t in temp)
{
t.Name += " ++++CHANGED!";
}
stoper.Stop();
Console.WriteLine(stoper.ElapsedMilliseconds + "ms (foreach)");
}
public static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
testFor();
testForeach();
Console.WriteLine("_______________");
}
Console.ReadKey();
}
}