c# - 深层嵌套字典是反模式吗?

标签 c# oop data-structures dictionary

我有一个结构,可以很容易地使用三层嵌套字典来表示,就像这样

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 TuplesC# 7 中引入最引人注目:

Dictionary<(string id, string group, string part), string> pt;

获取字典:

pt[("id", "group", "part")]

关于c# - 深层嵌套字典是反模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303859/

相关文章:

java - 如何绘制正确的类图?

c# - 如何在 .net 中检索硬盘固件序列号?

c++ - 基于策略的模板设计 : How to access certain policies of the class?

c# - 如何仅从 DateTimeOffset DateTimeOffset 对象中提取日期

java - 我应该使用 Abstract 或 Interface ...还是从应该扩展的具体类开始?

data-structures - 如何在内存中表示十六进制/十六进制网格?

java - 打印循环列表

java - 有效的 Java 项目 17 : How can overriding removeRange() improve performance?

c# - 将整个对象数组转换为字符串

字符串格式的 C# 秒到 TimeSpan