我成长起来的主要语言是PHP、Python等。在这些语言中,很容易初始化字典样式的对象(在其他语言中称为关联数组)。
我现在正在为一个项目使用C#,并且发现初始化一个大型字典的方法非常麻烦,并且认为我可能做错了什么,或者违背了最佳实践。例如,这里有一本字典,我想将一些项目数据保存在:
//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阶段层次结构就成了大量的代码行。如果你知道什么办法,请告诉我!谢谢
编辑**我已经画出了我想要获得的结构的类型。可以打包并写入保存文件的游戏进度数据:

发布于 2020-07-23 12:58:49
什么都不要用字典。字典本质上是由唯一键标识的值或对象的集合。除非这是你特别使用的,字典是错误的工具。
相反,请考虑所需结构的语义,并构建该结构。例如,在问题中的图像中:
所以就像这样:
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#在类中包含静态类型,您试图在关联数组中使用非常松散的类型。将您想要的结构构建到类中,在语义上属于这些类的类中包含必要的逻辑,代码将读得更好。
发布于 2020-07-23 12:53:42
我从来没有遇到过这样一个多层次的映射结构,但是如果您想要做到更干净,就需要将这些映射结构定义为类型。这使得代码既具有可读性(就声明长度而言),又可理解。
当然,您会对类型使用合理的名称,而不是TypeOutermost。
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>
{
}
}https://stackoverflow.com/questions/63054481
复制相似问题