在我的应用程序开发中,我得出结论,我需要这个变量。
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>
{ }
答案 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)
除非类型是基元(例如string
或int
),否则我倾向于避免将泛型类型嵌套到多个深层。我可能会重构,以便你有一个从Level
s映射到T
s的通用类:
class LevelMapping<T> {
IDictionary<Level, T> Mapping {get; set;}
// constructors/methods etc
}
现在,您可以IDictionary
string
到LevelMapping
。
IDictionary<string, LevelMapping<Problem>> PackageDictionaryForProblems;
IDictionary<string, LevelMapping<ProblemRule>> PackageDictionaryForProblemRules;
这当然取决于您在此处所映射的具体内容。可能更适合用特殊方法包装整个字典以更好地反映您的域(或者根本不包装它!)。
答案 3 :(得分:1)
我使用额外课程的三个原因:
答案 4 :(得分:0)
我个人认为没有理由创建类只是为一些现有功能添加别名。