Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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# 是否有与IEnumerator对应的可写接口?_C# - Fatal编程技术网

C# 是否有与IEnumerator对应的可写接口?

C# 是否有与IEnumerator对应的可写接口?,c#,C#,或者更确切地说:有没有一个很好的理由不使用类似于IEnumerator的东西,只使用写功能?对于改变一个基本上可编辑的集合来说,按照迭代器进行编写似乎是一种令人沮丧的方法,但我不明白为什么会这样。我忽略了什么?C的最新版本添加了ref foreach;这没有映射到接口-您需要手动实现它,但是:使用ref-foreach,您可以通过迭代器变量更改值。例如: 使用制度; 福班 { 公共NotImplementEditor GetEnumerator =>新的NotImplementEditor; }

或者更确切地说:有没有一个很好的理由不使用类似于IEnumerator的东西,只使用写功能?对于改变一个基本上可编辑的集合来说,按照迭代器进行编写似乎是一种令人沮丧的方法,但我不明白为什么会这样。我忽略了什么?

C的最新版本添加了ref foreach;这没有映射到接口-您需要手动实现它,但是:使用ref-foreach,您可以通过迭代器变量更改值。例如:

使用制度; 福班 { 公共NotImplementEditor GetEnumerator =>新的NotImplementEditor; } 类NotImplementEditor { public bool MoveNext=>抛出新的NotImplementedException; public ref int Current=>抛出新的NotImplementedException; } 静态类程序 { 静态空隙总管 { var obj=新的Foo; 对象中的foreachref int x { x=42;//通过ref分配**** } } } 所以:你现在所说的是可能的。因为它是通过引用赋值的,所以可以将更改直接推送到底层源中

它只是。。。这不是很常见,因为这不是人们在迭代数据时所期望的

他们只希望能够阅读 迭代器在不可变数据上很常见 现有接口仅支持读取概念 它需要像ref return这样的功能,大多数开发人员都不能很好地理解这种功能,并且不能在所有.NET语言中使用 ref返回仅在一些小的场景中是合理的
您知道,我们可以使用执行写操作的函数,但返回另一个IEnumerator,而不修改现有的IEnumerator,对吗?工会,康卡特,…应该指出你在哪里看到它是不受欢迎的。将Write语句放入IEnumerator或为IEnumerator类创建一个Write接口。@GSerg在我看来,您链接的答案表明它是无声地失败的,因此失败是实现的一个副作用,它在逻辑上明确关注性能。但这不是我要问的——我的问题是,为什么迭代器可以读取'Queue',但不能直接修改一个。这是一个真正的用例——例如,由于事件的原因,将x添加到所有队列元素中y@jdweng我不太明白这一点。如果没有Marc Gravell描述的ref-return功能,您将如何使用.Current访问来写入底层数据结构?我认为奇怪的是,人们不想写入iterable数据容器。或者更确切地说,我觉得奇怪的是,当所有其他人似乎都相处得很好的时候,我却很难接受它。对大多数人来说是什么?