如何管理迭代?

时间:2013-07-01 10:25:42

标签: c# .net linq iteration

假设我有一个返回List<string>的小组:

public List<string> ListaProvince
{
    get
    {
        return ListaDelleProvince.ToList();
    }
}

并且从许多Class中多次调用此方法。如果一个类在列表中迭代10°元素,下一个类开始从头开始迭代它,我怎么能确定?

我猜实例得到了相同的引用...所以相同的迭代器。

3 个答案:

答案 0 :(得分:4)

  

我猜实例得到了相同的引用...所以相同的迭代器。

即使ToList恰好是返回System.Collections.Generic.List<T> * 的同一个实例,您也会在{{{{}}中获得IEnumerator<T>的不同实例1}},所以你很安全。

<小时/> * 如果您的GetEnumerator()ListaDelleProvince,您将获得System.Collections.Generic.List<T>来电的不同实例。

答案 1 :(得分:2)

从技术上讲,如果不知道ListaDelleProvince是什么就无法回答,但如果我们假设它是一个相当标准的实现,那么每次访问ListaProvince时都会返回一个单独的独立列表 - 复制列表。不同列表上的迭代器当然独立。

但是,即使返回相同的列表:迭代器(通过GetEnumerator()通常独立于彼此(即它将是非 - 如果是这种情况,则是标准实施,但有时确实会发生。)

答案 2 :(得分:0)

ToList扩展方法会导致您的属性在每次读取时返回ListaDelleProvince序列的新副本,因此所有后续使用都是安全的。

也就是说,假设您正在使用检索到的列表进行阅读,即使这一步也不是必需的(并且会不必要地损害性能)。每个foreach循环都会导致新的枚举器被实例化以读取列表,因此您可以根据需要在同一列表中进行多次迭代(前提是它们不会对其进行修改)。

public List<string> ListaProvince
{
    get
    {
        return ListaDelleProvince;
    }
}