C# 在列表或字典中选择

C# 在列表或字典中选择,c#,collections,C#,Collections,我的.NET应用程序与用户集合一起工作。用户对象包含用户名、全名、域 我想知道我应该选择哪种类型的集合来存储用户,在1)列表还是2)字典之间,其中字典键是用户名 我知道当必须从用户名中检索用户时,dictionary选项是最快的,但是因为用户名被引用了两次,所以可能会发生一致性错误。(作为字典键和用户属性)? 你能解释一下从设计的角度来看有什么不同吗?如果你通常通过用户名寻找用户,那么一定要使用字典。使用一个列表,你必须“foreach”你的方式到正确的一个! 至于一致性,我将实现一个管理器类,

我的.NET应用程序与用户集合一起工作。用户对象包含用户名、全名、域

我想知道我应该选择哪种类型的集合来存储用户,在1)列表还是2)字典之间,其中字典键是用户名

我知道当必须从用户名中检索用户时,dictionary选项是最快的,但是因为用户名被引用了两次,所以可能会发生一致性错误。(作为字典键和用户属性)?
你能解释一下从设计的角度来看有什么不同吗?

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

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


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

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

var user = Users.SingleOrDefault(user => user.username == 'username')

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


我希望这有帮助。

您将无法在字典中拥有两个相同值的键。你没有一个独特的领域吗?请看这里:请查看常见问题解答:这个问题不能用这样一个通用的答案来回答。你可能还想看看