假设我有一个简单的数组:
double[] myDoubleArray = new double[] { 0, 1, 2, 3, 4, 5 };
这是高效的吗:
double last = myDoubleArray.Last();
这样吗?
double last = myDoubleArray[myDoubleArray.Length - 1];
即使可以进行上述优化,Last() 是否会遍历整个数组?
如果我传递了其他一些 IEnumerable(比如已生成的一个),Last() 将枚举序列。我更喜欢使用 Last(),因为代码看起来更干净,但如果它枚举序列,我不会做出牺牲。
最佳答案
不,它不会遍历所有元素。这是来自反射器的 Enumerable.Last() 的代码。如你所见,它做了这样的优化
public static TSource Last<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
IList<TSource> list = source as IList<TSource>;
if (list != null)
{
int count = list.Count;
if (count > 0)
{
return list[count - 1];
}
}
else
{
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
TSource current;
do
{
current = enumerator.Current;
}
while (enumerator.MoveNext());
return current;
}
}
}
throw Error.NoElements();
}
关于c# - Enumerable.Last<T>() 和 C# 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595777/