2

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

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

你怎么看待这件事?只创建这个类是一个好习惯吗?还是我需要为每个类创建几个类?IE

public class ProblemCollection : IList<Problem>
{ }
4

5 回答 5

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>>>定义以理解数据结构更容易。这只是个人偏爱)。

于 2012-07-30T18:43:08.577 回答
2

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

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

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

但是,如果您只是直接公开底层类型,那么创建此类与仅使用内置类型相比几乎没有优势。

于 2012-07-30T18:46:45.543 回答
2

我倾向于避免嵌套超过一层的泛型类型,除非类型是原始类型(例如stringint)。我可能会重构,以便您拥有一个从Levels映射到 s 的通用类T

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

  // constructors/methods etc
}

现在你可以拥有一个IDictionaryof stringto LevelMappings。

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

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

于 2012-07-30T18:50:46.187 回答
1

我使用额外类的三个原因:

  1. 可读性。
  2. 轻松添加额外的方法和属性以及覆盖
  3. 轻松更改类型(只需替换基本类型,而不是在我的代码中寻找实例化对象的类型。
于 2012-07-30T18:47:47.790 回答
0

就我个人而言,我认为没有理由仅仅为某些现有功能起别名而创建类。

于 2012-07-30T18:42:12.807 回答