【发布时间】:2015-09-23 21:10:51
【问题描述】:
如果我们有字段List<Dictionary<>>,如何将其公开为只读属性?
举例:
public class Test
{
private List<Dictionary<string, object>> _list;
}
我可以这样暴露它
public ReadOnlyCollection<Dictionary<string, object>> List
{
get { return _list.AsReadOnly(); }
}
但仍然可以更改目录:
var test = new Test();
test.List[0]["a"] = 3; // possible
test.List[0].Add("e", 33); // possible
这里尝试将其设为只读
public ReadOnlyCollection<ReadOnlyDictionary<string, object>> List
{
get
{
return _list.Select(item =>
new ReadOnlyDictionary<string, object>(item)).ToList().AsReadOnly();
}
}
我认为这种方法的问题很明显:它是一个新字典列表。
我想要的是类似于List<>.AsReadOnly() 的东西,让属性充当_list 的包装器。
【问题讨论】:
-
@oppassum:这似乎是一个不同的问题。这里的这个问题是关于如何确保只读列表的 elements 也是只读的(至少根据它们的公共接口)。
-
是的,评论已删除。实际上,我只是没有仔细查看代码。
标签: c# dictionary collections readonly-collection