我正在寻找一种用简单名称命名复杂类型的方法。 例子
代替
Dictionary<string,List<Dictionary<string,string>>> myvar = ...
只要做一些魔术,我就可以将myvar定义为
MyNewType myvar = new MyNewType()
myvar = ....
我总能做到
class MyNewType{
public Dictionary<string,List<Dictionary<string,string>>> myvar ;
}
但是我需要输入
MyNewType myType = new myNewVar();
myNewVar.myvar = ....
每次引用myvar都需要一个虚拟myNewVar
致谢
答案 0 :(得分:2)
我能给您的最好的提示-尽管不会回答您的问题被发布-是:请勿这样做。不要试图将复杂的数据结构转换成Dictionary
这样的简单数据。通常,在设计此类概念时,您会想到某种数据表。该表本身没有任何意义,因此您会认为:我的表具有许多属性。因此,我有一本字典,其键是字符串-这些属性的名称。而且这些属性可以出现多次,因此它本身就是一个列表。这个概念不断发展壮大,最终您将陷入一个庞大的列表和地图系统,这些列表和地图无法维护,因为没人会确切地知道在编写myType.MyVar["Attribute"][1]["AnotherAttribute"]
时实际上要引用的实体模型的哪一部分。乍一看似乎很聪明,但是随着您需求的变化-他们会会-这将成为维护方面的噩梦。假设您得到一个实际上是数字类型的新属性。但是,您的字典仅由字符串和其他列表组成,根本没有空格可容纳数字。因此,您将您的数字以字符串的形式存储在星期中,这会导致许多麻烦的转换工作,例如ToString
,然后返回int
。
那还有什么呢?我在上面描述了一个实体模型。您要记住一组表,其中每个表都有一组属性。因此,让我们特定:哪些属性?他们有哪些类型?以及如何在该表中找到实体的通用名称?一旦回答了这些问题,您便具有易于理解和易于扩展的类结构。例如。 Car
确实具有* Wheel s, usually four. So you have a
列表here. Maybe it also has some creator, e.g
BMW or
Mercedes , those are pretty sure string-attributes. And it may have a creation-date, which is a
Date`。因此,您的课程如下所示:
class Car
{
public string Creator { get; set; }
publi Date CreationDate { get; set; }
public List<Wheel> Wheels { get; set; }
}
另一方面,wheel
可以有一个Size
。这可能是一些数字格式。因此,而不是像这样的字典:
myCar["Wheels"][2]["Size"] // hmmm, what type is Size? a double? an int?
您知道有一种更简单的方法:
myCar.Wheels[2].Size // nice, we have a double at compile-time.
答案 1 :(得分:0)
通常,如果要命名概念,则应将其命名为class
(在某些情况下为struct
)。特别是对于像嵌套字典这样看似复杂的结构。在大多数情况下,此类结构具有固有的其他逻辑,最好将其建模为自己的类型。
如果您完全确信需要新的“类型”,则可以随时为文件定义别名:
using MyType = Dictionary<string,List<Dictionary<string,string>>>;
这与您要使用此别名的每个文件顶部的所有其他using
一起使用。请注意,从“外部”开始,该别名将是未知的。这样的方法
public MyType DoStuff(){ ... }
仍将显示为
public Dictionary<string,List<Dictionary<string,string>>> DoStuff()
用于所有使用代码。