我有一个问题。
我最近将IDictionary
之一更改为IEnumerable<KeyValuePair>
。
之所以这样做是因为不应修改此项目集合。
正如我所看到的那些是相同的,但IEnumerable并没有实现添加,删除等,这使我和我使用这个集合的区域非常完美。
public IDictionary<string, UserInformation> MyItems;
public IEnumerable<KeyValuePair<string, UserInformation>> MyItems;
现在回答我的问题。
我之前发现了类似的帖子,但没有人真正解释使用什么以及为什么。
答案 0 :(得分:5)
最重要的问题是IDictionary
旨在用于高效查找。如果真的只想表示一对对,那么你的方法是可以的 - 但我不会使用KeyValuePair
,除非这种关系在语义上真的是一个键/值...在哪种情况下,我真的只会使用字典。
当然,您不必公开字典 - 您可以公开仅获取密钥值的方法(也可能会公开一个序列键和一系列值。)
或者您可以创建IDictionary<,>
的只读实现 - 当然有一个示例实现in this answer。
答案 1 :(得分:1)
我会说你可以使用一个IDictionary<string, UserInformation>
方法将<{1}} 包装到某个类中。像这样:
Get(...)
通过这种方式你:
public class DictionaryWrapper
{
private IDictionary<string, UserInformation> _dict = .... // dictionary is PRIVATE!
public UserInformation GetUserInfo(string key) // method is PUBLIC
{
UserInformation ui;
_dict.TryGetValue(key, out ui);
return ui;
}
}
的访问,对其公共成员也是如此。Dictionary
时会丢失。答案 2 :(得分:1)
根据你的问题,
IEnumnerable<KeyValuePair<string, UserInformation>>
可以有重复的密钥。 IDictionary
无法