Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这里是如何管理迭代的?_C#_.net_Linq_Iteration - Fatal编程技术网

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;
    }
}