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注释都非常长.)
完全隐藏字典.只需在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)
| 归档时间: |
|
| 查看次数: |
10741 次 |
| 最近记录: |