首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于构造C#词典的问题

关于构造C#词典的问题
EN

Stack Overflow用户
提问于 2020-07-23 12:38:43
回答 2查看 43关注 0票数 0

我成长起来的主要语言是PHP、Python等。在这些语言中,很容易初始化字典样式的对象(在其他语言中称为关联数组)。

我现在正在为一个项目使用C#,并且发现初始化一个大型字典的方法非常麻烦,并且认为我可能做错了什么,或者违背了最佳实践。例如,这里有一本字典,我想将一些项目数据保存在:

代码语言:javascript
运行
复制
//Campaign dictionary
    public Dictionary<int, Dictionary<string, Dictionary<object, Dictionary<string, object>>>> campaignData = new Dictionary<int, Dictionary<string, Dictionary<object, Dictionary<string, object>>>>();

似乎有更好的方法来做这件事。代码根本无法读懂,仅仅为了初始化一个简单的3-4阶段层次结构就成了大量的代码行。如果你知道什么办法,请告诉我!谢谢

编辑**我已经画出了我想要获得的结构的类型。可以打包并写入保存文件的游戏进度数据:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-23 12:58:49

什么都不要用字典。字典本质上是由唯一键标识的值或对象的集合。除非这是你特别使用的,字典是错误的工具。

相反,请考虑所需结构的语义,并构建该结构。例如,在问题中的图像中:

  1. a Objective,包含Vector3和bool
  2. --目标
  3. A级别的列表,其中包含目标列表和bool

所以就像这样:

代码语言:javascript
运行
复制
public class Objective
{
    public Vector3 Position { get; set; }
    public bool IsCompleted { get; set; }
}

public class Level
{
    public IEnumerable<Objective> Objectives { get; set; }
    public bool LevelIsComplete { get; set; }
}

也许你还有一个级别的列表,也许包含在一个“游戏”或者类似的东西里。等。

关键是C#在类中包含静态类型,您试图在关联数组中使用非常松散的类型。将您想要的结构构建到类中,在语义上属于这些类的类中包含必要的逻辑,代码将读得更好。

票数 2
EN

Stack Overflow用户

发布于 2020-07-23 12:53:42

我从来没有遇到过这样一个多层次的映射结构,但是如果您想要做到更干净,就需要将这些映射结构定义为类型。这使得代码既具有可读性(就声明长度而言),又可理解。

当然,您会对类型使用合理的名称,而不是TypeOutermost

代码语言:javascript
运行
复制
internal class Program
{
    public static void Main(string[] args)
    {
        var campaignData = new Dictionary<int, TypeOutermost>();
    }

    public class TypeOutermost : Dictionary<string, TypeMid>
    {
    }

    public class TypeMid : Dictionary<object, TypeInnermost>
    {
    }

    public class TypeInnermost : Dictionary<string, object>
    {
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63054481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档