我正在尝试访问C#中的List项目。我有一个列表List<int[]>
。我必须将List的前三个元素(整数数组)分配给变量。这就是我的工作;
int[] c1 = lst.ElementAt(0);
int[] c2 = lst.ElementAt(1);
int[] c3 = lst.ElementAt(2);
我也尝试通过lst[0], lst[1], lst[2]
代替ElementAt()
访问它。但是虽然列表的前三个元素彼此不同,但所有变量都取第一个列表项的值。我通过调试检查了值。我做错了什么,另外还有一个问题是,lst[0]
和lst.ElementAt(0)
之间有什么区别。
答案 0 :(得分:3)
你做错了什么。因为ElementAt的默认实现如下所示:
public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, int index) {
if (source == null) throw Error.ArgumentNull("source");
IList<TSource> list = source as IList<TSource>;
if (list != null) return list[index];
if (index < 0) throw Error.ArgumentOutOfRange("index");
using (IEnumerator<TSource> e = source.GetEnumerator()) {
while (true) {
if (!e.MoveNext()) throw Error.ArgumentOutOfRange("index");
if (index == 0) return e.Current;
index--;
}
}
}
对于任何实现IList的内容,它将使用与您相同的索引器