C# 添加重复项时仅覆盖的数据类型

C# 添加重复项时仅覆盖的数据类型,c#,optimization,union,C#,Optimization,Union,有这样的数据类型吗?字典抛出异常,列表允许同一事物的多个副本 或者,如果有一种方法可以降低对列表进行.Union调用的成本,那么在我的情况下也可以实现同样的效果。如果调用Add,Dictionary只会抛出异常。只需使用索引器进行分配,即可实现所需的行为 Dictionary<string, int> dict = new Dictionary<string, int>(); dict["foo"] = 1; dict["foo"] = 2; 我们通过子类化Syste

有这样的数据类型吗?字典抛出异常,列表允许同一事物的多个副本

或者,如果有一种方法可以降低对列表进行.Union调用的成本,那么在我的情况下也可以实现同样的效果。

如果调用Add,Dictionary只会抛出异常。只需使用索引器进行分配,即可实现所需的行为

Dictionary<string, int> dict = new Dictionary<string, int>();

dict["foo"] = 1;
dict["foo"] = 2;

我们通过子类化System.Collections.ObjectModel.KeyedCollection来实现这一点,并根据我们的需要对Add方法进行隐藏,或者覆盖Insert方法。

覆盖通常是不好的,除非您希望这样做


您可以通过使用来跳过重复项。

通过允许重复项设置值。

但我只想调用.Add1,然后调用.Add1,不需要获取异常,也不必调用containsKey先进行检查。请使用索引器而不是调用Add。不需要检查钥匙是否已经存在。看看我的例子。但是我怎么知道覆盖或不覆盖什么索引呢?我不太清楚你的意思…索引器采用与Add函数相同的关键参数。你只要把同一把钥匙传给索引器,对不起,我不清楚。我的列表在add中包含一个参数。这本词典需要两个字母。钥匙应该是什么?如果我试图访问一个不存在的索引,会发生什么?这与@Adam Robinson的答案相同。[]语法被称为项属性或索引器。我投了反对票,因为这是一个糟糕的解决方案。在c语言中,阴影或隐藏是一个主要的危险信号。此外,创建新集合类型并重写其插入行为是不必要的,因为库已经公开了具有所需行为的类型。是的,但是在使用索引器不是选项的情况下(例如数据绑定),情况如何?在这种情况下,覆盖Insert是唯一的选择。手头的问题似乎没有给出任何迹象表明会出现这种情况。该问题没有给出任何具体的场景。根据措辞,假设OP正在寻找通用解决方案是完全合理的。通用解决方案应考虑多种场景,包括数据绑定。如果OP要求一个特定的场景解决方案,我会同意你。对不起,我只是不同意你。OP没有给出任何迹象表明他的集合将在绑定上下文中使用,例如,他使用List描述,而不是类似ObservableCollection或BindingList的东西,后者在绑定场景中更合适。考虑到他要求这样做,我认为可以安全地假设他希望这样做!也许,我应该写下——你真的需要这样做:无论你做什么,都不一定是最好的。干杯也许您可以解释一下使用该集合的上下文?