6

我的 .NET 应用程序适用于用户集合。用户对象包含用户名、全名、域......

我想知道我应该更喜欢哪种类型的集合来存储用户,介于 1) 列表或 2) 字典之间,其中字典键是用户名。

我知道字典选项在必须从用户名中检索用户时最快,但由于用户名被引用两次,可能会出现一致性错误。(作为字典键和用户属性)?您能否从设计的角度解释一下有什么不同?

4

4 回答 4

3

如果您通常通过 UserName 寻找用户,那么一定要使用 Dictionary。使用列表,您必须“寻找”正确的方式!至于一致性,我将实现一个 Manager 类,它是唯一允许操作字典的类,从而强制一致性。在许多会员引擎中,用户名无法更改。这对您的解决方案有帮助吗?

于 2012-07-30T14:53:26.057 回答
2

从设计的角度来看,最好的方法是创建一个自定义类 UserCollection 并隐藏实际的存储细节。这使您能够从 List 更改为 Dictionary 而不会影响其他代码。假设它是一个额外的抽象层。

List 和 Dictionary 之间的区别是概念性的。简单规则 - 如果项目是唯一的并且您需要 O(c) 搜索复杂度,则使用字典,否则使用列表。

于 2012-07-30T14:54:40.067 回答
0

这取决于要求,我认为对于较小的列表,性能差异可以忽略不计,考虑到一致性,使用 List 应该是首选方法,您可以进行类似的查询。

var user = Users.SingleOrDefault(user => user.username == 'username')
于 2012-07-30T14:57:11.140 回答
0

我更喜欢对象列表,尤其是当数据存储在数据库中时。能够查询数据源并返回列表非常有帮助。当数据被顺序访问时,例如使用数据网格,它也是优选的。

我希望这有帮助。

于 2012-07-30T15:11:51.400 回答