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

为什么Dictionary.Add会覆盖我字典中的所有项目?

在C#中,Dictionary.Add方法用于向字典中添加一个新的键值对。如果尝试添加一个已存在的键,则会抛出ArgumentException异常,因为字典中不允许存在重复的键。

如果你在使用Dictionary.Add方法时发现它覆盖了字典中的所有项目,这通常是因为你在循环中使用了相同的键。例如,以下代码将会导致字典中的所有项目被覆盖:

代码语言:csharp
复制
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
for (int i = 0; i < 10; i++)
{
    myDictionary.Add("key", i);
}

在这个例子中,循环中的每次迭代都使用相同的键"key"来添加一个新的键值对。因为字典中不允许存在重复的键,所以每次迭代都会覆盖之前的键值对。

为了避免这种情况,你可以使用Dictionary.TryAdd方法来尝试添加一个新的键值对,而不是使用Dictionary.Add方法。如果键已经存在,则TryAdd方法不会抛出异常,而是返回false。例如:

代码语言:csharp
复制
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
for (int i = 0; i < 10; i++)
{
    myDictionary.TryAdd("key" + i, i);
}

在这个例子中,我们使用TryAdd方法来添加新的键值对,并且为每个键添加一个唯一的后缀,以避免重复的键。这样就不会覆盖字典中的所有项目了。

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

相关·内容

JavaScript数据结构-字典

字典是一种以“键–值”对形式存储数据数据结构。就像电话薄里名字和号码一样。JavaScriptObject类就是以字典形式设计。...在《数据结构与算法JavaScript描述》书中“字典”采用了数组存储数据,不仅让阅读者很难理解,而且也没有实现便捷性,反而其中代码逻辑是错误,不能按照设计方式正确输出结果!!!...请查看-JavaScript对象、函数(你不知道JavaScript) 二、为字典类添加排序功能 为字典排序,可以转化为某个对象属性排序。...("b", 2); dictionary.add("a", 1); dictionary.add("c", 3); dictionary.showAll(); // "b: 2" "a: 1" "c...对于相同key,后面的覆盖前面的。当然,可以通过修改代码实现其他方式。

65441

.net mvc前台如何接收和解析后台字典类型数据

很久没有写博客了,最近做了一个公司门户网站项目,其中接触到了一些不会知识点,今日事情少,便记录一下,当时想在网上搜索相关内容,但是没有找到。   今天想记录一下这样一个小需求做法。...先说一下想法:因为是一个门户网站,所以我需要从后台传大量数据到前台,考虑是这样做,用一个字典类型(dictionary)变量,把数据类型(比如新闻,公司产品,技术特点,公司简介)等等作为字典键值...这样一个字典数据就比较复杂了,后台都做好了,前端也能接收到数据,但不知道怎么把这些数据一一拿出来,在网上查了很多资料,但问题没有解决,后来知道公司一个前辈曾把一个字典数据通过web api传递给...事先声明,本篇博客只会把关键代码贴上,而不会写一个完整demo,因为那样增加很多不必要内容。...}).ToList().Cast().ToList(); 第三步,把数据添加到字典dictionary.Add("Technology", TechnologyData); 前面是键

1.1K20

ASP.NET MVC基于标注特性Model验证:DataAnnotationsModelValidatorProvider

通过前面的介绍我们知道它是AssociatedValidatorProvider子类,后者在用于获取ModelValidatorGetValidators方法已经根据指定Model元数据所有特性创建出来...DataAnnotationsModelValidationFactory委托,前者是以此委托为Value以Type对象为Key字典。...在重写GetValidators方法,针对指定每一个ValidationAttribute,它先根据其类型从AttributeFactories获取一个对应DataAnnotationsModelValidationFactory...ValidatableFactories是一个以此委托为Value,以Type对象为Key字典。...接口,那么先从字典ValidatableFactories根据此类型获取一个对应DataAnnotationsValidatableObjectAdapterFactory委托,如果匹配委托对象存在

91080

ConcurrentDictionary 对决 Dictionary+Locking

但不知道为什么,MSDN 4.0 版本,关于 GetOrAdd 方法签名描述并没有包含一个需要传递一个委托类型参数说明。...当然,碰到问题与我使用方法有关,一般来说,我会使用字典类型来缓存一些数据: 这些数据创建起来非常慢; 这些数据只能创建一次,因为创建第二次抛出异常,或者多次创建可能导致资源泄漏等; 就是在第二个条件上遇到了问题...但,请再考虑下,如果下面描述情形发生了怎样: 使用Emit动态生成代码。在一个 Remoting 框架中使用了这种方式,并且将所有的实现都放到了一个不能被回收程序集当中。...比如一个字典对象持有一个远程服务器上一个服务连接,该连接只能请求一次,如果请求第二次,对方服务认为发生了某种错误,进而记录到日志。(工作过一个公司,这种条件遭到一些法律上处罚。)...如果我们有多个键值需要添加,并且所有的键不会产生碰撞并会被分配在不同 Bucket ,情况如何? 起初,这个问题还是让很好奇,但我做了个不太合适测试。

1.5K70

迁移 appseting.json 创建自定义配置中心

文本讨论是创建一个自定配置中心主要是想通过不改变去读取方式去将appseting.json这些配置迁移至数据库。...数据库切换 想要解决数据库切换问题,首先就是把配置构建从Program类抽离出来,重新构建一个类去创建配置所用到IConfiguration,故我将配置初始写在静态方法,通过传递连接字符串以及数据库类型方式去构建不同上下文...数据库切换其实也给了我们热重载解决方案,可以将构建方法暴露出来,动态去刷新构造类IConfiguration,如果是在控制台应用程序或者其他非Web项目中,可能没有appseting.json文件,...这里可以使用观察者模式,去监控配置实体改变事件,如果有修改则调用一次构建方法去覆盖配置中心IConfiguration。...如果它不存在,则创建数据库及其所有模式,并确保它与此上下文模型兼容 dbContext.Database.EnsureCreated(); var keyValueData

1.2K40

WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(上篇)

一、XmlDictionary XmlDictionary,顾名思义,它是一个字典,它是从事编码和解码双方共享一份“词汇表”。这样说法可能有点抽象,我们不妨做一个类比。...在WCF所有基于文本编码工作最终都落在XmlUTF8TextWriter上面,由于该类是一个内部类型,我们只能通过XmlDictionaryWriter提供3个静态工厂方法CreateTextWriter...在这里使用XmlDictionaryCreateTextWriter方法创建XmlUTF8TextWriter对象,对一个简单XML文档(文档仅仅具有一个XML元素)进行编码,然后输出经过编码后字节长度...如果采用纯文本编码方式,基于Base64编码方式会使编码后内容显得非常冗余,而且这些冗余数据直接置于SOAP消息主体,使得SOAP消息十分庞大,从而影响SOAP消息正常传输。...在WCF所有关于MTOM编码与解码相关功能都通过XmlMtomWriter来完成,XmlMtomWriter通过XmlDictionaryWriterCreateMtomWriter静态方法创建

80670

关于python字典类型最疯狂表达方式

确定你能够接受1.0 == 1,但实际情况是为什么 也会被认为等于1呢?第一次看到这个字典表达式真的让难住了。...这就解释了为什么最终产生字典只包含一个键。...就目前我们所知而言,似乎看起来像是,结果字典值一直被覆盖,只是因为他们键比较后相等。然而,事实上,这个结果也不单单是由 比较后相等就得出。 等等,那哈希值呢?...正如你所看到,下面的一个例子键不会被覆盖,即使它们总是相等: 下面,我们可以换个思路,如果返回相同哈希值是不是就会让键被覆盖呢?...这个类实例将相互比较一定不相等,但它们拥有相同哈希值1: 一起来看看python字典在我们试图使用类实例作为字典键时结果: 如本例所示,“键被覆盖结果也并不是单独由哈希冲突引起

1.1K100

依赖注入(IOC)

背景介绍 在设计模式,尤其是结构型模式很多时候解决就是对象间依赖关系,变依赖具体为依赖抽象。...平时开发如果发现客户程序依赖某个或某类对象,我们常常会对他们进行一次抽象,形成抽象抽象类、接口,这样客户程序就可以摆脱所依赖具体类型。...这样问题集中在TimeProvider变化影响客户程序,但其实客户程序仅需要抽象地使用其获取当前时间方法。...下面是一个Assembler示例实现: public class Assembler { //保存“抽象类型/实体类型"对应关系字典 static Dictionary<Type, Type...确认可以正常获得抽象类型实例 Client client = timeProvider;//通过Setter实现注入 } } 从C#语言发展看,设置注入方式更”Lamada化“,使用时可以根据现场环境需要动态装配,因此在新项目更倾向于使用设置注入

1K40

浅析C# Dictionary实现原理

对于C#Dictionary类相信大家都不陌生,这是一个Collection(集合)类型,可以通过Key/Value(键值对形式来存放数据;该类最大优点就是它查找元素时间复杂度接近O(1),实际项目中常被用来做一些数据本地缓存...接下来就是所要介绍Resize(扩容)这样一种操作,对我们buckets、entries进行扩容。...所有的元素都刚好落在buckets[3]上面,结果就是导致了时间复杂度O(n),查找性能会下降;所以第二种,Dictionary中发生碰撞次数太多,严重影响性能,也触发扩容操作。...目前.Net Framwork还没有这样优化,.Net Core已经有了类似的优化,以后有时间在分享.Net Core一些集合实现。 每次扩容操作都需要遍历所有元素,影响性能。...这就是为什么Remove操作记录freeList、freeCount,就是为了将删除空间利用起来。实际上Add操作优先使用freeList空闲entry位置,摘录代码如下。

21540

B站up主用AI还原李焕英 动态影像

「从有记忆开始,妈妈就是中年妇女模样,所以我会忘记,她也曾是花季少女。」 春节档上映《你好,李焕英》让不少人在影院哭得稀里哗啦,它戳中了每个人心里最柔软部分。...有人看完电影之后会给妈妈打个电话,有人拿出妈妈年轻时照片,感叹一下爸爸基因为什么要那么强大。...为了帮助大家掌握这项技能,大谷还公布了他用到两个开源项目:飞桨 PaddleGAN 和 DFDNet。...接下来,利用退化输入(degraded input),研究者从相应字典匹配和选择最相似的部位特征,并通过提出字典特征迁移块(DFT)将高质量细节迁移到输入上。...该网络基本结构如下: ? ? 网络主要包含两个部分:a. 从大量包含各种姿态和表情高质量图像离线生成多尺度组件字典

58030

Redis系列(九)底层数据结构之五种基础数据类型实现

前言 Redis 已经是大家耳熟能详东西了,日常工作也都在使用,面试也是高频涉及到,那么我们对它究竟了解有多深刻呢?...这五种基本类型基本覆盖了我们业务中使用 80%场景,对面试也覆盖至少 90%.(其中重点当然是有序集合以及散列结构咯)....集合对象编码可以是 intset 或者 hashtable(字典) . intset 当集合所有元素都是整数,且元素数量不大于 512 个时候,使用 intset 编码。 ?...当我们只使用字典来实现,我们可以以 O(1) 时间复杂度获取成员分值,但是由于字典是无序,当我们需要进行范围性操作时候,需要对字典所有元素进行排序,这个时间复杂度至少需要 O(nlogn)....参考文章 《Redis 设计与实现(第二版)》 《Redis 深度历险:核心原理和应用实践》 完。 联系 最后,欢迎关注个人公众号【 呼延十 】,不定期更新很多后端工程师学习笔记。

97820

用技术致敬每一位妈妈,B站up主用AI还原李焕英老照片动态影像

机器之心报道 编辑:张倩 「从有记忆开始,妈妈就是中年妇女模样,所以我会忘记,她也曾是花季少女。」 春节档上映《你好,李焕英》让不少人在影院哭得稀里哗啦,它戳中了每个人心里最柔软部分。...有人看完电影之后会给妈妈打个电话,有人拿出妈妈年轻时照片,感叹一下爸爸基因为什么要那么强大。...为了帮助大家掌握这项技能,大谷还公布了他用到两个开源项目:飞桨 PaddleGAN 和 DFDNet。...接下来,利用退化输入(degraded input),研究者从相应字典匹配和选择最相似的部位特征,并通过提出字典特征迁移块(DFT)将高质量细节迁移到输入上。...该网络基本结构如下: ? ? 网络主要包含两个部分:a. 从大量包含各种姿态和表情高质量图像离线生成多尺度组件字典

48240

Python字典介绍

因为你努力会使你变得更加优秀,同时你所结识圈子也不一样,当机会来临时你才能更好把握住。这就是大佬为什么越来越优秀,这本质上是一个良性循环过程。...现在,也可以拍拍肩膀告诉自己:「加油,年轻人,未来是你! 」 Python编程 接下来开始今天学习,昨天分享了关于Python列表与元组知识,今天我们来学习字典使用。... 2 常用操作 创建字典、增删改查、长度、遍历字典等 创建字典1 # 键特性:唯一 不可变对象 # 数字、字符串、元组等可以为键,列表不可以 # 重复时,后一个键值对覆盖前面的...计算字典元素个数,即键总数 print(len(dict1)) # 以列表返回字典所有键 print(dict1.keys()) # 以列表返回字典所有值 print(dict1....点赞转发、留言鼓励是对于原创作者最大鼓励,您一次点赞、留言也许在您看来没有什么,可是在Mark看来那是大家对自己肯定与鼓励。好了有点矫情了,先到这了,去哭一。 原创不易,感谢分享

83120

【敬初学者】Python基础学完了,该怎么知道自己学怎么样呢?十个经典实战小项目附源码

制作Gif动图 前言 初学者要想成功,一句话,大量实操,大量练,乍一看我这个答案似乎有点敷衍,但是这确实是接触Python以来,总结出最有价值经验,接下来分享自己初学时用来练手经典实战小项目...许多年以后,春丽站在A号街区,突然想起打败神月卡琳后那个下午。...构造该Trie结构算法逻辑很简单,以第一次构造为例: 将姓名第一个字作为键插入到指针指向字典,键值为一个空字典,然后将指针指向键值所对应字典,接着将姓名第二个字作为键插入到指针指向字典...,键值为一个空字典,同样需要将指针指向键值所对应字典,不断重复这样过程,直到遍历完姓名所有字符。...2.3基于英文分词猜单词游戏 项目要求 ① 对某一篇英文文章进行分词,以获取一个英语词典 ② 如果用户输入单词在词典,则提示”你是个猜单词天才,请收下膝盖” ③ 如果用户输入前缀匹配第一个字母

40310

搞事情了 | 教你用Python分析微信好友信息(内附完整代码)

为什么都这么乐观呢? 因为我们都知道今天解决不了事情,不能着急,不能慌,因为明天你可能也解决不了! ? ?...保存csv文件 将上面的字典信息保存为 csv 文件,保存文件方法之前项目也经常用到,在此不再赘述,主要代码如下。 ?...生成词云图保存在该项目代码同一目录下,主要代码如下。 ? 制作个性签名词云图 个性签名词云图和昵称词云图代码几乎一样,只是从上面信息取是个性签名信息做成词云图而已。...代码中保存词云图名称改成和昵称词云图不同即可,不然覆盖保存。当然你可以把制作词云图背景图换一个,由于代码几乎一样,就不做展示了。...制作好友城市分布图 提取信息城市或地区信息,去除没填写地区或城市空白字符。对地区信息进行统计,为了展示效果,去掉了所在地区个数在 5 个以下情况,因为城市太多,图显得很臃肿。

90630

浅析C# Dictionary实现原理

实际项目中常被用来做一些数据本地缓存,提升整体效率。...接下来就是所要介绍**Resize(扩容)**这样一种操作,对我们buckets、entries进行扩容。...1548498901496 所有的元素都刚好落在buckets[3]上面,结果就是导致了时间复杂度 O(n),查找性能会下降;所以**第二种,Dictionary 中发生碰撞次数太多,严重影响性能,...目前**.Net Framwork还没有这样优化,.Net Core已经有了类似的优化,以后有时间在分享.Net Core**一些集合实现。 每次扩容操作都需要遍历所有元素,影响性能。...这就是为什么Remove操作记录freeList、freeCount,就是为了将删除空间利用起来。实际上Add操作优先使用freeList空闲entry位置,摘录代码如下。

49020

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券