当前位置: 首页 > 知识库问答 >
问题:

foreach循环如何处理非绑定集合中的更改?c#

通令
2023-03-14

众所周知,不能将foreach循环中的集合修改为InvalidOperationException。但是foreach循环如何签出任何更改?我的意思是,如果我有密码:

foreach(var item in List<int> list) {
    list.Add(5);
    list.Remove(5);
}

…它仍然会抛出异常。IEnumerator接口中没有集合的任何版本控制。这是怎么回事?我之所以要求这样做,是因为在java中,您可以在循环期间轻松地修改集合,这是我自己的HashCollection实现中的问题,我不知道如何检查任何集合更改。

共有1个答案

庄实
2023-03-14

好的,我找到答案了

public class List<T> {
...
    public struct Enumerator : IEnumerator<T>, System.Collections.IEnumerator
        {
            private List<T> list;
            private int index;
            private int version; // there it is
            private T current;
 
            internal Enumerator(List<T> list) {
                this.list = list;
                index = 0;
                version = list._version;
                current = default(T);
            }
...

里面的内部结构列出了我不能用java做的事情。也许我应该声明open Version属性,并在枚举器内部传递集合

 类似资料:
  • 我首先想到的是,一个property_a不能绑定到另一个property_b,这个property_b绑定到property_a或者依赖于属性,这些属性绑定到property_a。对吧?

  • 我是scala新手,想知道如何在scala中的特定索引处启动foreach循环?我的代码目前看起来像这样: 这里的“列表”包含字符串列表[“一”、“二”、“三”、“四”、“五”]。而不是从列表的开始,我希望我的每一个循环从索引i开始操作,忽略所有的VAUES在前面(即只考虑值“四”和“五”)。 谁能帮帮我吗?提前谢谢

  • 下面是我的父组件,它包含一个循环的多个输入。如何选择一个来聚焦?在这种情况下,我必须创建动态吗?

  • 问题内容: 在过去的几周里,我一直在与Facebook框架React.js和Backbone一起工作,但是我仍然不确定是否有什么最合适的方法来重新渲染React组件。已作为道具传递。 目前我要做的是在集合上设置侦听器,并在触发时设置状态: 我已经看到了将模型克隆到状态的示例: 我也看到了变体,其中props中的模型/集合直接在渲染中使用,而不是使用状态,然后在集合/模型发生更改时调用forceUp

  • 我正在迭代Java 7循环和Java 8 循环中的列表。Java 8 循环希望其中的变量不会更改。例如: 有人能解释一下为什么吗?是Java 8的弊端吗?