如果我有一个冗长的数据类型,有问题吗?

时间:2012-07-30 18:39:45

标签: c# oop list dictionary

在我的应用程序开发中,我得出结论,我需要这个变量。

IDictionary<string, IDictionary<Levels, IList<Problem>>> PackageDictionaryForProblems
IDictionary<string, IDictionary<Levels, IList<ProblemRule>>> PackageDictionaryForProblemRules

但是因为我需要访问字典中的每个键,所以这很痛苦。我认为这是一个很好的选择创建一个类来避免写入所有数据类型:

public class PackageDictionaryForProblems : IDictionary<string, IDictionary<Levels, IList<Problem>>>
{ }

// the sane for the second dictionary

您如何看待这个?创建这个类是一个好习惯吗?或者我应该为每个人创建几个类?即。

public class ProblemCollection : IList<Problem>
{ }

5 个答案:

答案 0 :(得分:3)

在定义多级集合(如

)的两个选项之间,runtype没有区别
IDictionary<string, IDictionary<Levels, IList<Problem>>> PackageDictionaryForProblems

或定义/使用类似

的类型
public class PackageDictionaryForProblems : IDictionary<string, IDictionary<Levels,     IList<Problem>>>
{ }

PackageDictionaryForProblems中没有任何其他功能,它只是IDictionary<string, IDictionary<Levels, IList<Problem>>>的别名。

你仍然会得到相同的内存分配,访问时间等。添加自定义类型只会简化代码的可读性(或者不是......个人而言,我发现更容易查看IDictionary<string, IDictionary<Levels, IList<Problem>>>定义到了解数据结构。这只是个人偏好。)

答案 1 :(得分:2)

  

创建这个类是一个好习惯吗?

使用自定义类的主要优点,特别是在这种情况下,它允许您简化访问。

嵌套字典访问通常可以通过添加更高级别的成员函数来简化,因为“单一访问”通常需要检查包装的字典,这可以添加新的字典等。将其包装成简单的API可以大大简化使用类型。

但是,如果您只是直接公开底层类型,那么仅使用内置类型创建此类几乎没有什么好处。

答案 2 :(得分:2)

除非类型是基元(例如stringint),否则我倾向于避免将泛型类型嵌套到多个深层。我可能会重构,以便你有一个从Level s映射到T s的通用类:

class LevelMapping<T> {
  IDictionary<Level, T> Mapping {get; set;}

  // constructors/methods etc
}

现在,您可以IDictionary stringLevelMapping

IDictionary<string, LevelMapping<Problem>> PackageDictionaryForProblems;
IDictionary<string, LevelMapping<ProblemRule>> PackageDictionaryForProblemRules;

这当然取决于您在此处所映射的具体内容。可能更适合用特殊方法包装整个字典以更好地反映您的域(或者根本不包装它!)。

答案 3 :(得分:1)

我使用额外课程的三个原因:

  1. 可读性。
  2. 轻松添加额外的方法和属性以及覆盖
  3. 轻松更改类型(只需替换基类型,而不是寻找实例化对象的代码中的类型。

答案 4 :(得分:0)

我个人认为没有理由创建类只是为一些现有功能添加别名。