我有一个结构,可以很容易地使用三层嵌套字典来表示,就像这样
private static Dictionary<string, Dictionary<string, Dictionary<string,string>>> PrerenderedTemplates;
结构可能会像这样使用
PrerenderedTemplates[instanceID][templategroup][templatepart]
现在,我意识到这段代码很难阅读,因为从定义语句中看,您无法判断它的用途。我真正看到的唯一优势是将其更改为 Dictionary<string, PrerenderedTemplate>
是可读性。将每个嵌套转换成它自己的类(例如 class PrerenderedTemplate{} class TemplateGroup{} class TemplatePart{}
)会增加更多的代码行,几乎没有(如果有的话)计算优势。据我所知。
- 那么,我的方法“可行”吗?还是我应该加倍努力并创建单独的类?
- 是否可以覆盖嵌套
Dictionary
在文档/评论中工作 - 是否有处理此类嵌套的最佳实践?
- 请记住,这是一个私有(private)成员,它不需要对使用该类的人来说是直截了当的。
更新
因此,受到 Reza 的启发,但无法使用元组,我决定创建自己的 key 生成器并像这样实现他的模式:
private Dictionary<string, string> PrerenderedTemplates;
private string GetPrerenderedTemplateKey(string InstanceId, string FeatureId, string OptionId)
{
return new StringBuilder(instanceId)
.Append(FormatTools.LIST_ENTRY_DELIMITER)
.Append(templategroup)
.Append(FormatTools.LIST_ENTRY_DELIMITER)
.Append(templatepart).ToString();
}
在哪里FormatTools.LIST_ENTRY_DELIMITER
是 Unicode 专用字符 0xe04d
.
最佳答案
我提供另一种选择:
Dictionary<Tuple<string, string, string>, string> pt;
获取字典:
pt[Tuple.Create("id","group","part")]
UPDATE:
Value Tuples 在 C# 7 中引入最引人注目:
Dictionary<(string id, string group, string part), string> pt;
获取字典:
pt[("id", "group", "part")]
关于c# - 深层嵌套字典是反模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303859/