假设我有一个返回 a 的类List<string>
:
public List<string> ListaProvince
{
get
{
return ListaDelleProvince.ToList();
}
}
并且从许多类中多次调用此方法。我如何确定,如果一个类正在迭代列表中的 10° 元素,那么下一个类会从头开始迭代它?
我猜这个实例得到了相同的引用......所以相同的迭代器。
我猜这个实例得到了相同的引用......所以相同的迭代器。
即使ToList
碰巧它返回相同的System.Collections.Generic.List<T>
*实例,您也会得到 in 的不同实例IEnumerator<T>
,GetEnumerator()
因此您是安全的。
ListaDelleProvince
是一个System.Collections.Generic.List<T>
,你会从调用中得到不同的实例ToList()
。
从技术上讲,如果不知道它是什么,这是不可能回答ListaDelleProvince
的,但如果我们假设它是一个相当标准的实现,那么每次ListaProvince
访问它都会返回一个单独且独立的列表 - 复制列表。不同列表上的迭代器当然是独立的。
然而,即使返回了相同的列表:迭代器(via GetEnumerator()
)通常是相互独立的(即,如果是这种情况,这将是一个非标准的实现,但有时确实会发生)。
扩展方法将导致您的属性在每次读取时ToList
返回序列的新副本,因此所有后续使用都是安全的。ListaDelleProvince
也就是说,假设您只是将检索到的列表用于阅读,即使这一步也不是必需的(并且会不必要地损害性能)。每个foreach
循环都将导致实例化一个新的枚举器以读取列表,因此您可以根据需要在同一个列表上迭代尽可能多的枚举器(前提是它们不修改它)。
public List<string> ListaProvince
{
get
{
return ListaDelleProvince;
}
}