C# Hashtable Add 与 Indexer - 为什么两者都有?

标签 c# hashtable

我知道哈希表的添加和通过索引器分配的操作是不同的(即后者将允许覆盖,而前者抛出“项目已添加。字典中的键:...”异常) .我的问题是,在什么情况下您可能想要添加一些东西,但如果它已经存在就抛出异常?

具体来说,这似乎只是对另外两个原子操作(包含和通过索引器的分配)的封装,我无法想出一个我希望微软以封装的方式处理它的场景.

编辑:我完全支持异常情况应该抛出异常的想法,并且当给定的键已经在字典中时,Add(虽然只是一个封装)提供异常。但是,哈希表和字典通常用于从键到值的快速查找。此外,大多数时候当我构建一个时,我已经有了整个集合,我只是将它翻译成字典。

一个例子让我印象深刻……我可以想象这样一个场景,您正在使用哈希表(或字典)来跟踪登录到特定 session 的用户的 session 。如果您有一个特定的要求,即每个用户一次只能从一个位置登录(并且他们必须在再次登录之前注销一个 session ),那么您可能需要添加,因为它更清楚地定义了意图代码。

最佳答案

需要异常抛出行为的场景是您不希望值一直存在,因此发现它会出现异常,表明出现了问题。如果您不希望 key 已经存在,您就不会希望对每个添加的元素都进行 Contains 测试,对吧?

关于C# Hashtable Add 与 Indexer - 为什么两者都有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782831/

相关文章:

objective-c - 哈希表中的 ARC 弱引用

hashtable - 具有墓碑的哈希表的负载因子

java - 哈希表 - Java

java通过objecs字符串参数对具有对象值的哈希表进行排序

c# - 存储具有相应索引的对象的最有效方法

c# - 在 transactionScope 中使用客户端测试 WebAPI?

c# - 控制台应用程序中的 PetaPoco "already an open DataReader"

C# 直接赋值或使用私有(private) setter

c# - 以编程方式启用辅助监视器

c# - WCF 服务客户端的正确使用方法