【发布时间】:2015-12-10 04:59:25
【问题描述】:
来自msdn:
表示键/值对的通用只读集合。
但请考虑以下几点:
class Test
{
public IReadOnlyDictionary<string, string> Dictionary { get; } = new Dictionary<string, string>
{
{ "1", "111" },
{ "2", "222" },
{ "3", "333" },
};
public IReadOnlyList<string> List { get; } =
(new List<string> { "1", "2", "3" }).AsReadOnly();
}
class Program
{
static void Main(string[] args)
{
var test = new Test();
var dictionary = (Dictionary<string, string>)test.Dictionary; // possible
dictionary.Add("4", "444"); // possible
dictionary.Remove("3"); // possible
var list = (List<string>)test.List; // impossible
list.Add("4"); // impossible
list.RemoveAt(0); // impossible
}
}
我可以轻松地将IReadOnlyDictionary 转换为Dictionary(任何人都可以)并更改它,而List 有很好的AsReadOnly 方法。
问题:如何正确使用IReadOnlyDictionary公开确实只读字典?
【问题讨论】:
-
我认为在
Dictionary上创建一个Adapter 有助于只公开只读 行为。 -
您误解了接口的作用。它只是描述了一份合同。例如,
IList<T>可以继承IReadOnlyCollection<T>,但这不会使实现List<T>的列表成为只读的。您的实际问题是“如何制作只读字典”? -
@CodeCaster,嗯,是的。但不是自己制作,而是正确重用.net类型中的现有内容。
-
@adricadar,我正在使用属性。
标签: c# dictionary readonly-collection