如何最好地防止向字典中添加内容

3

我有一个包含三个键/值对的字典对象。我希望这些值可以被修改,但我又不想允许添加更多键/值对。如何最好地防止添加新的键/值对呢?我考虑过隐藏Add方法来实现。


你需要它成为字典的原因是什么? - Reed Copsey
3个回答

10

只需将字典封装在自定义类中,不提供添加的方式。

话虽如此,如果始终只有三个值,我会考虑使用具有三个属性的类而不是字典。 如果键是固定且预先已知的,则创建字典没有意义-三个属性将具有更简单、更少出错的API,并且更加高效。


如果只有三个值,建议不要使用字典。 - Dan
在这种情况下,有三个,但在其他情况下可能有四个、五个或只有两个。例如,对于一个报告生成工具,每个报告部分都有固定数量的子部分。因此,我考虑使用一个接口IReportSection,每个扩展它的类都将使用字典,但会有不同的条目。 - appsecguy
@pendraggon87,你可以随时让接口或类提供一个索引器(http://msdn.microsoft.com/en-us/library/vstudio/6x16t2tx.aspx),而不是实际使用字典。由于每个类都有一个固定的#(无论它是多少)用于该类,因此字典并不是必需的... - Reed Copsey
@ReedCopsey 谢谢你的想法 - 让生活更轻松 :) - appsecguy

4
创建一个包装类,禁止这些操作,然后在您想要使键集只读时,在实例中包装字典。(例如,显式实现IDictionary.Add()并使其抛出NotSupportedException。)

0
隐藏几乎从来都不是正确的做法(我猜你所说的“隐藏”是指子类化并使用new来隐藏基类方法)。如果你隐藏了Add方法,而消费者将你的对象转换回基类,则他们将能够访问隐藏的方法并向其中添加项。
正如其他人建议的那样,在这里最好的方法可能是创建一个包装器,它封装了一个IDictionary 并且不提供添加的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接