0

假设我有一个返回 a 的类List<string>

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

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

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

4

3 回答 3

4

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

即使ToList碰巧它返回相同的System.Collections.Generic.List<T>*实例,您也会得到 in 的不同实例IEnumerator<T>GetEnumerator()因此您是安全的。


*如果你ListaDelleProvince是一个System.Collections.Generic.List<T>,你会从调用中得到不同的实例ToList()

于 2013-07-01T10:30:08.470 回答
2

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

然而,即使返回了相同的列表:迭代器(via GetEnumerator()通常是相互独立的(即,如果是这种情况,这将是一个非标准的实现,但有时确实会发生)。

于 2013-07-01T10:29:01.807 回答
0

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

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

public List<string> ListaProvince
{
    get
    {
        return ListaDelleProvince;
    }
}
于 2013-07-01T10:31:44.063 回答