我知道哈希表的添加和通过索引器分配的操作是不同的(即后者将允许覆盖,而前者抛出“项目已添加。字典中的键:...”异常) .我的问题是,在什么情况下您可能想要添加一些东西,但如果它已经存在就抛出异常?
具体来说,这似乎只是对另外两个原子操作(包含和通过索引器的分配)的封装,我无法想出一个我希望微软以封装的方式处理它的场景.
编辑:我完全支持异常情况应该抛出异常的想法,并且当给定的键已经在字典中时,Add(虽然只是一个封装)提供异常。但是,哈希表和字典通常用于从键到值的快速查找。此外,大多数时候当我构建一个时,我已经有了整个集合,我只是将它翻译成字典。
一个例子让我印象深刻……我可以想象这样一个场景,您正在使用哈希表(或字典)来跟踪登录到特定 session 的用户的 session 。如果您有一个特定的要求,即每个用户一次只能从一个位置登录(并且他们必须在再次登录之前注销一个 session ),那么您可能需要添加,因为它更清楚地定义了意图代码。
最佳答案
需要异常抛出行为的场景是您不希望值一直存在,因此发现它会出现异常,表明出现了问题。如果您不希望 key 已经存在,您就不会希望对每个添加的元素都进行 Contains 测试,对吧?
关于C# Hashtable Add 与 Indexer - 为什么两者都有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782831/