假设我有一个返回List<string>
的小组:
public List<string> ListaProvince
{
get
{
return ListaDelleProvince.ToList();
}
}
并且从许多Class中多次调用此方法。如果一个类在列表中迭代10°元素,下一个类开始从头开始迭代它,我怎么能确定?
我猜实例得到了相同的引用...所以相同的迭代器。
答案 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;
}
}