首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能在foreach中添加一个字典(Key,Value)?

在 C# 中,foreach 循环用于遍历集合中的每个元素,但它不允许在循环内部修改集合。因此,在 foreach 循环中直接添加一个字典 (Key, Value) 是不允许的。

如果您需要在遍历字典时添加新的键值对,可以使用 for 循环或者 foreach 循环遍历字典的键,并在循环外部添加新的键值对。例如:

代码语言:csharp
复制
Dictionary<string, int> dictionary = new Dictionary<string, int>();

// 添加初始数据
dictionary.Add("apple", 1);
dictionary.Add("banana", 2);

// 遍历字典的键
foreach (string key in dictionary.Keys)
{
    // 在循环外部添加新的键值对
    if (key == "apple")
    {
        dictionary.Add("orange", 3);
    }
}

或者使用 for 循环遍历字典的键:

代码语言:csharp
复制
Dictionary<string, int> dictionary = new Dictionary<string, int>();

// 添加初始数据
dictionary.Add("apple", 1);
dictionary.Add("banana", 2);

// 遍历字典的键
for (int i = 0; i< dictionary.Count; i++)
{
    string key = dictionary.Keys.ElementAt(i);

    // 在循环内部添加新的键值对
    if (key == "apple")
    {
        dictionary.Add("orange", 3);
    }
}

需要注意的是,在遍历字典时,如果添加新的键值对会导致键的数量发生变化,可能会导致循环出现异常。因此,在遍历字典时添加新的键值对需要谨慎处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

项目优化之数据集合优化(Unity3D)

应该使用Array吗?应该使用List吗?噢 ,等等,或者使用Dictionaries? 为什么的循环花了那么长时间呢? ? 在代码中看不到任何的错误,那么为什么的代码执行那么慢?...为什么查找我想要的对象话费那么长时间? 看不到任何的GC(垃圾回收器)处理,然而我的游戏为什么那么的延迟? “这些是我们在开发一个游戏的时候经常遇到的一些常见问题。”...在UnityDictionary(字典) 和 List(列表)是最常用的集合,让给初学者对于Dictionary(字典) 和 List(列表)的一些基本概念。如果知道的朋友可以跳过。 1....Dictionary Dictionary实际上使一个哈希表类型的替代品 Dictionary代表一个键值对 例如,如果5代表Red,10代表Green,我们便在Dictionary通过5键(Key...e) 正如你在代码中看到的,创建了一个Private(私有的)方法为那些集合添加一些随机数。

62240

怒肝 JavaScript 数据结构 — 字典

大家好,是杨成功。 经过上一篇的学习,数据结构的集合部分已经完结了。那么下面我们又要认识一个新的数据结构,它的名字相信你绝不陌生,它就是字典。 这个字典可不是查汉字时用的那个字典。...因为我们的 key固定的,然而在后面的方法要频繁使用 key,此时你不知道键名具体是什么。...= value; } } 接下来在类声明一些必要的方法如下: set:向字典添加新元素 remove:以键名为参数,移除字典对应的键值 hasKey:检测某个键名是否存在于字典,存在则返回...:返回字典中所有键值组成的数组 keyValues:返回所有键值对 forEach:迭代所有的键值对 hasKey 方法 该方法的作用是检测一个键是否在字典。...set 方法 set 方法用来在字典添加键值对: set(key, value) { if(key != null && value !

54020

TypeScript实现Map与HashMap

一个完整的字典类需要具备:判断一个键是否在字典、向字典添加元素、根据key移除字典存的元素、根据key查找字典的元素、获取字典存储的所有元素等方法,接下来我们来分析下这些方法的实现思路。...向字典添加元素(set) set方法接收两个参数:key & value 判断参数的有效性,key & value不为null | undefined时向字典添加元素,否则直接返回false 参数有效时...讲过上述操作后,我们就成功的向字典添加一个元素,返回true。...,将key转为字符串,然后将其作为参数传给字典对象,最后调用对象的delete方法删除目标key,返回true 获取字典存储的所有对象 (keyValues) keyValues方法接收任何参数,返回值为一个对象数组...返回 keys | values 迭代字典的数据(forEach) forEach方法接收一个回调函数作为参数,其回调函数有两个参数:key & value 获取字典的所有数据 遍历获取到的数据,调用回调函数参数将当前遍历到的对象的

1.2K30

Dart的基础语法与类型变量

构建字符串字面量时既能使用双引号,也能使用单引号,还能在字符串嵌入变量或者表达式:你可以使用${express}把一个表达式的值放进字符串。而如果是一个标识符,你可以省略{}。...["name"] = "Tom"; map2["sex"] = "male"; map2.forEach((key, value) => print('$key:$value')); 这段代码分两部分...: 在代码示例的前半部分,我们声明并初始化了两个List变量,在第二个变量添加一个新的元素后,调用其迭代方法依次打印出其内部元素; 在代码示例的后半部分,我们声明并初始化了两个Map变量,在第二个变量添加了两个键值对后...以上述代码为例,如果往arr2集合添加一个浮点数: arr2.add(2.2); 尽管语义上是合法的,但是编译器会提示类型匹配,从而导致编译失败: The argument type 'double...Map(); map2["name"] = "Tom"; map2["sex"] = "male"; map2.forEach((key, value) =

87240

.NET Core采用的全新配置系统: 为什么针对XML的支持不够好?如何改进?

一、为什么针对集合的配置难以通过优雅的XML来表示 在《配置模型设计详解》一文我们对配置模型的设计和实现进行了详细介绍。...在此文中我们说应用的配置体现为一种树形化的层次结构,所将它称为“配置树”,具体的配置数据通过配置树的“叶子节点”承载。当配置数据从不同的来源加载之后都会转换成一个字典将其称为“配置字典”。...为了让“配置字典”能够存储“配置树”的所有数据和自身结构,我们需要在配置字典存储所有叶子节点,叶子节点的路径和值将直接作为字典元素的KeyValue。...由于字典Key是唯一的,这就要求配置树的每一个节点必须具有唯一的路径。...在重写的Load方法,ExtendedXmlConfigurationProvider通过对原始的XML结构进行相应的改动,从而让原本不合法的XML(XML元素具有相同的名称)可以转换成一个针对集合的配置字典

70550

前端面试必备ES6全方位总结

let和const let是ES6规范定义用于声明变量的关键字。 使用let声明的变量有一个块级作用域范围。 为什么需要块级作用域?...['des', 'JS'] ]); map.size // 2 操作方法: set(key, value):向字典添加新元素 get(key):通过键查找特定的数值并返回 has(key):判断字典是否存在键...key delete(key):通过键 key字典移除对应的数据 clear():将这个字典的所有元素删除 遍历方法 Keys():将字典包含的所有键名以迭代器形式返回 values():将字典包含的所有数值以迭代器形式返回...entries():返回所有成员的迭代器 forEach():遍历字典的所有成员 字典(Map) 集合 与 字典 的区别: 共同点:集合、字典 可以储存不重复的值 不同点:集合 是以 [value,...value]的形式储存元素,字典 是以 [key, value] 的形式储存

1.2K30

你真的了解字典(Dictionary)吗?

时间复杂度n2,相信如果用的是这种方法,可肯定被Pass了. 思路2 首先,遍历线路2的所有节点,把节点的索引作为key,下级节点索引作为value存入字典....他不可能在全中国的家庭一个个去遍历,敲门,问阿宇是你们家的熊孩子吗? 正常应该是通过的名字,找到我的身份证号码,然后的身份证上登记着的家庭地址(我们假设一个名字只能找到一张身份证)..../liuzhenyulive/DictionaryMini 觉得字典这几个方面值得了解一下: 数据存储的最小单元的数据结构 字典的初始化 添加新元素 字典的扩容 移除元素 字典还有其他功能,但我相信...https://github.com/liuzhenyulive/DictionaryMini 答疑时间 字典为什么能无限地Add呢 向Dictionary添加元素时,会有一步进行判断字典是否满了,如果满了...为什么字典取数据这么快 Key-->HashCode-->HashCode%Size-->Bucket Index-->Bucket-->Entry Index-->Value 整个过程都没有通过遍历来查找数据

55310

你真的了解字典吗(dictionary)?

时间复杂度n2,相信如果用的是这种方法,可肯定被Pass了. 思路2 首先,遍历线路2的所有节点,把节点的索引作为key,下级节点索引作为value存入字典....他不可能在全中国的家庭一个个去遍历,敲门,问阿宇是你们家的熊孩子吗? 正常应该是通过的名字,找到我的身份证号码,然后的身份证上登记着的家庭地址(我们假设一个名字只能找到一张身份证)..../liuzhenyulive/DictionaryMini 觉得字典这几个方面值得了解一下: 数据存储的最小单元的数据结构 字典的初始化 添加新元素 字典的扩容 移除元素 字典还有其他功能,但我相信...答疑时间 字典为什么能无限地Add呢 向Dictionary添加元素时,会有一步进行判断字典是否满了,如果满了,会用Resize对字典进行自动地扩容,所以字典不会向数组那样有固定的容量....为什么字典取数据这么快 Key-->HashCode-->HashCode%Size-->Bucket Index-->Bucket-->Entry Index-->Value 整个过程都没有通过遍历来查找数据

63110

Swift| 基础语法(三)

只有相同类型的数组才能合并 var array = ["why", "lmj","lnj"] var array1 = ["yz", "wsz"] var array2 = array + array1; // 建议一个数组存放多种类型的数据...字典允许按照某个键来访问元素 字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的 Swift字典类型是...) } // 遍历字典中所有的键 for key in dict.keys { print(key) } // 遍历所有的键值对 for (key, value) in dict { print...(keyvalue) } 字典的合并 // 字典的合并 var dict1 = ["name" : "yz", "age" : 20] var dict2 = ["height" : 1.87, "phoneNum..." : "+86 110"] // 字典不可以相加合并 for (key, value) in dict1 { dict2[key] = value } 四、方法的书写 方法调用 闭包必须使用

1.5K20

为什么set集合过滤停用词能那么快?

小小明,「快学Pthon」专栏作者 上期演示了高效过滤停用词的方法,这期将带你重温Python基础set集合和字典的使用方法,并讲解字典和集合的实现原理。...,将会添加键并将值设为default dict.update(dict2) 把字典dict2的键/值对更新到dict里 dict.values() 以列表返回字典的所有值 dict.pop(key[,...set集合为什么可以加速筛选 字典和集合的基本概念 字典是一系列由键(key)和值(value)配对组成的元素的集合,而集合没有键和值的配对,是一系列无序的、唯一的元素组合,相当于没有值的字典。...相比于列表和元组,字典和集合性能较高,查找、添加和删除操作都能在常数时间复杂度内完成。集合不支持索引操作,因为它的本质是一个哈希表,而字典支持对指定键的索引操作。...老版本Python的哈希表结构如下所示: 哈希值 (hash) 键 (key) 值 (value) hash0 key0 value0 hash1 key1 value1 hash2 key2 value2

85010

通过实例模拟ASP.NET MVC的Model绑定的机制:集合+字典

针对集合的Model绑定实现在方法BindCollectionModel,我们按照数组绑定的方式得的针对目标集合对象的所有元素对象,并将其添加一个List对象,然后调用ReplaceHelper...在Model绑定过程基于字典类型的数据映射很好理解,首先,字典一个KeyValuePair对象的集合,所以在字典元素这一级可以采用基于索引的匹配机制;其次,KeyValuePair...是一个复杂类型,可以按照属性名称(KeyValue)进行匹配。...在对该列表进行遍历过程,我们在索引的基础上添加“.Key”和“.Value”后缀从而得到作为字典元素(KeyValuePair)KeyValue对象的前缀,并将该前缀作为参数递归地调用...在得到字典元素KeyValue之后,我们创建一个KeyValuePair对象并添加预先创建的列表

1.8K70
领券