C# 这里是如何管理迭代的?
假设我有一个类返回一个C# 这里是如何管理迭代的?,c#,.net,linq,iteration,C#,.net,Linq,Iteration,假设我有一个类返回一个列表: 公共列表提供 { 得到 { 返回listadelleprovision.ToList(); } } 这个方法在很多类中被多次调用。我如何确定,如果一个类正在迭代列表中的10°元素,那么下一个类将从头开始迭代它 我猜这个实例得到了相同的引用。。。因此相同的迭代器。从技术上讲,如果不知道什么是ListaDeleProvince,这是不可能回答的,但是如果我们假设它是一个相当标准的实现,那么每次访问ListaProvince时,它都会返回一个独立的列表-复制列表。不同列
列表
:
公共列表提供
{
得到
{
返回listadelleprovision.ToList();
}
}
这个方法在很多类中被多次调用。我如何确定,如果一个类正在迭代列表中的10°元素,那么下一个类将从头开始迭代它
我猜这个实例得到了相同的引用。。。因此相同的迭代器。从技术上讲,如果不知道什么是
ListaDeleProvince
,这是不可能回答的,但是如果我们假设它是一个相当标准的实现,那么每次访问ListaProvince
时,它都会返回一个独立的列表-复制列表。不同列表上的迭代器当然是独立的
但是,即使返回了相同的列表:迭代器(通过
GetEnumerator()
)通常是相互独立的(即,如果是这种情况,这将是一个非标准的实现,但有时确实会发生)。从技术上讲,如果不知道ListaDelegory
是什么,这是不可能回答的,但是,如果我们假设它是一个相当标准的实现,那么每次访问listaprovience
时,它都会返回一个独立的列表,即复制列表。不同列表上的迭代器当然是独立的
但是,即使返回了相同的列表:迭代器(通过GetEnumerator()
)通常是相互独立的(即,如果是这种情况,这将是一个非标准实现,但有时确实会发生)
我猜这个实例得到了相同的引用。。。同样的迭代器
即使ToList
恰好返回相同的System.Collections.Generic.List
*,您也会在GetEnumerator()
中得到不同的IEnumerator
实例,这样您就安全了。
*如果您的
listadelleprovision
是System.Collections.Generic.List
,则调用ToList()
会得到不同的实例
我猜这个实例得到了相同的引用。。。同样的迭代器
即使ToList
恰好返回相同的System.Collections.Generic.List
*,您也会在GetEnumerator()
中得到不同的IEnumerator
实例,这样您就安全了。
*如果您的
ListaDeleProvince
是一个System.Collections.Generic.List
,您将从调用ToList()
得到不同的实例,扩展方法将使您的属性在每次读取时返回一个新的ListaDeleProvince
序列副本,因此,所有后续使用都是安全的
也就是说,假设您只是为了阅读而使用检索到的列表,即使这一步也不是必需的(而且会不必要地影响性能)。每个foreach
循环都会导致实例化一个新的枚举器以读取列表,因此您可以让任意多的枚举器在同一个列表上迭代(前提是它们不修改列表)
公共列表提供
{
得到
{
返回塔德勒省;
}
}
扩展方法将使您的属性在每次读取ListaDeleProvince
序列时返回该序列的新副本,因此所有后续使用都是安全的
也就是说,假设您只是为了阅读而使用检索到的列表,即使这一步也不是必需的(而且会不必要地影响性能)。每个foreach
循环都会导致实例化一个新的枚举器以读取列表,因此您可以让任意多的枚举器在同一个列表上迭代(前提是它们不修改列表)
公共列表提供
{
得到
{
返回塔德勒省;
}
}
listaDelelle省
是一个列表。为什么每次都会返回单独的列表?它指向同一个对象…@markzzz,因为Enumerable.ToList
就是这样做的;它不会返回相同的列表抱歉,Marc在最后一行失去了您,您指的是什么非标准实现?@V4Vendetta说我在IDataReader
或NetworkStream
之类的东西上写了一个自定义迭代器块-这些都是只转发的非缓冲不可重复的输入;无法隔离单独的枚举数。但是,列表和数组等对象上的迭代器通常是孤立的。listadeleleprovince
是一个列表。为什么每次都会返回单独的列表?它指向同一个对象…@markzzz,因为Enumerable.ToList
就是这样做的;它不会返回相同的列表抱歉,Marc在最后一行失去了您,您指的是什么非标准实现?@V4Vendetta说我在IDataReader
或NetworkStream
之类的东西上写了一个自定义迭代器块-这些都是只转发的非缓冲不可重复的输入;无法隔离单独的枚举数。但是,列表和数组等对象上的迭代器通常是隔离的。。。同样的迭代器否。每个foreach
/ToList()
都有自己的迭代器。相同的引用。。。同样的迭代器不。每个foreach
/ToList()
都有自己的迭代器。即使使用ToDictionary()
?@markzzz是的,LINQ的ToDictionary()
也会给你一个新实例。即使使用ToDictionary()
?@markzzz是的,LINQ的ToDictionary()
也会给你一个新实例。
public List<string> ListaProvince
{
get
{
return ListaDelleProvince.ToList();
}
}
public List<string> ListaProvince
{
get
{
return ListaDelleProvince;
}
}