c#中的const词典

Sam*_*ijo 8 .net c# dictionary readonly immutability

我在C#中有一个包含字典的类,我想创建它并确保在该字典中添加,编辑或删除任何内容,只要包含它的类存在即可.

readonly并没有真正的帮助,一旦我测试并看到我可以添加项目.例如,我创建了一个例子:

public class DictContainer
{
    private readonly Dictionary<int, int> myDictionary;

    public DictContainer()
    {
        myDictionary = GetDictionary();
    }

    private Dictionary<int, int> GetDictionary()
    {
        Dictionary<int, int> myDictionary = new Dictionary<int, int>();

        myDictionary.Add(1, 2);
        myDictionary.Add(2, 4);
        myDictionary.Add(3, 6);

        return myDictionary;
    }

    public void Add(int key, int value)
    {
        myDictionary.Add(key, value);
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望Add方法不起作用.如果可能的话,我希望它甚至不能编译.有什么建议?

实际上,我很担心代码会让很多人改变.因此,即使我隐藏了Add方法,某人也可能"无辜地"创建一个添加密钥或删除另一个密钥的方法.我希望人们看起来并知道他们不应该以任何方式改变字典.就像我有一个const变量一样.

Nol*_*rin 12

.NET Framework中没有任何内容可以帮助您,但是这篇文章ReadOnlyDictionary在C#中提供了很好的泛型实现.它实现了所有你可能会期望它的接口(IDictionary,ICollection,IEnumerable等),作为奖金,整个类及其成员与XML完全注释.

(我没有在这里发布代码,因为所有XML注释都非常长.)

  • +1"未在此处发布代码"!链接到原始来源总是更好; 类似于记者的作者. (3认同)
  • @Cerebrus:是的,首先应始终链接到原始来源 - 正如您所说,最好将其归于作者.我的观点是,如果代码/文本足够短,那么*镜像*通常对此有帮助(例如,如果网站出现故障),但在这种情况下这并不合适. (3认同)

Nei*_*ell 7

完全隐藏字典.只需在DictContainer类上提供一个get方法,该方法从字典中检索项目.

public class DictContainer
{
    private readonly Dictionary<int, int> myDictionary;

    public DictContainer()
    {
        myDictionary = GetDictionary();
    }

    private Dictionary<int, int> GetDictionary()
    {
        Dictionary<int, int> myDictionary = new Dictionary<int, int>();

        myDictionary.Add(1, 2);
        myDictionary.Add(2, 4);
        myDictionary.Add(3, 6);

        return myDictionary;
    }

    public this[int key]
    {
        return myDictionary[key];
    }
}
Run Code Online (Sandbox Code Playgroud)


Eoi*_*ell 2

不要定义Add方法。

保持myDictionary变量私有并公开 Getter/Indexer,以便只能从该类外部读取它。