您也可以这样做,但看起来以前的帖子也是正确的。
for(int i = 0; i < pizzas.Count; i++)
Console.WriteLine(pizzas.ElementAt(i));
Console.ReadLine();
编辑1:
如果不明显,您想要的特定索引 (1) 将按如下方式访问:
string pizza = pizzas.ElementAt(1);
编辑2:
错误的代码。见编辑 3。
编辑3:
给定这两种方法,让我们测试它们。
代码:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace ElementAtOrIndex
{
class Program
{
// Declare/initialize static variables.
static Stopwatch timer = new Stopwatch();
static List<long> ElementAtTimes = new List<long>();
static List<long> IndexTimes = new List<long>();
static void Main(string[] args)
{
// Declare/initialize variables.
int count = 100000;
int iterations = 1000;
// Just initializes a list with elements from 0 to count.
// Slower than for loops, but pithy for an example on SO.
List<int> list = Enumerable.Range(0, count).ToList<int>();
// Assert that both methods are equal.
for (int i = 0; i < list.Count; i++)
{
if (list.ElementAt(i) != list[i])
{
Console.WriteLine("Both methods are not equal!");
Environment.Exit(1);
}
}
Console.WriteLine("Both methods are equal!");
// Time ElementAt access *iterations* times by copying into a variable.
for (int i = 0; i < iterations; i++)
{
// [Re]start the timer.
timer.Reset();
timer.Start();
int temp;
for (int j = 0; j < list.Count; j++)
temp = list.ElementAt(j);
// Note the time.
ElementAtTimes.Add(timer.ElapsedTicks);
}
// Time Index access *iterations* times by copying into a variable.
for (int i = 0; i < iterations; i++)
{
// [Re]start the timer.
timer.Reset();
timer.Start();
int temp;
for (int j = 0; j < list.Count; j++)
temp = list[j];
// Note the time.
IndexTimes.Add(timer.ElapsedTicks);
}
// Output times.
Console.WriteLine("Average time for ElementAt access: {0} ns", ElementAtTimes.Average() / count * 100);
Console.WriteLine("Average time for Index access: {0} ns", IndexTimes.Average() / count * 100);
Console.ReadLine();
}
}
}
测试:
http://goo.gl/Tf10R
输出:
Both methods are equal!
Average time for ElementAt access: 25.101014 ns
Average time for Index access: 12.961065 ns
评论:
当涉及到错误时,MSDN 文档和大量经验证据表明,这种担忧是完全没有根据的。如果列表发生更改,那么这些更改当然会通过两种访问方法反映出来。
索引访问方法肯定更快,但我想淡化多少。这是 100,000 次访问的计时。通过访问访问,它只快了几纳秒。这最终会加起来,但对于大多数应用程序来说是不必要的优化,而且这两种方法最终都会做同样的事情。
此外,虽然这仅显示了访问 int 类型列表的时间,但我已经测试了 double、float 和 string 类型的列表,结果相似。如果需要,我可以发布这些版本。
*索引访问方法在所有情况下都应该更快,但里程因硬件而异。我的计算机对ElementAt()
和索引访问方法的访问时间分别为 5.71ns 和 0.27ns。