Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ILookup接口与IDictionary_C#_.net - Fatal编程技术网

C# ILookup接口与IDictionary

C# ILookup接口与IDictionary,c#,.net,C#,.net,界面与其他界面有何不同 我不明白这个界面是什么意思。它比IDictionary简单得多。它由Linq使用。它只有包含,项和计数IDictionary具有添加、删除等功能。ILookup项可以包含每个键的多个项-每个键都映射到一个iNumber 另外,正如注释中所暗示的那样,ILookup是不可变的,而您可以更新IDictionary中的值(它公开了一个Add()方法和一个允许获取和设置值的索引器) 总之,它们的使用情形是非常不同的——当您需要一个1:N的映射,其值是固定的并且不会(也不能)更改时

界面与其他界面有何不同


我不明白这个界面是什么意思。

它比
IDictionary
简单得多。它由Linq使用。它只有
包含
计数
<代码>IDictionary具有
添加
删除
等功能。

ILookup
项可以包含每个键的多个项-每个键都映射到一个
iNumber

另外,正如注释中所暗示的那样,
ILookup
是不可变的,而您可以更新
IDictionary
中的值(它公开了一个
Add()
方法和一个允许获取设置值的索引器)


总之,它们的使用情形是非常不同的——当您需要一个1:N的映射,其值是固定的并且不会(也不能)更改时,您可以使用查找。另一方面,字典提供了键值对的可变1:1映射,因此可以对其进行更新以添加或删除值。

首先想到的是“多映射”支持(一个键可以映射到一组值)。可能是“”的重复。事实上,每个条目都是
IEnumerable
,而不是
T
+1,如果为true,最好能有更多关于接口差异、更新可变性、关键需求等方面的内容。实现
ILookup
并不能保证不变性。你的回答似乎暗示它是正确的。它仅提供查找的只读视图。此外,接受
ILookup
的方法如何处理查找的内容更改取决于该方法,如果没有文档,则更安全的做法是避免在外来代码仍在引用查找时对其进行修改,具体取决于您的使用情况。查看关于人们如何错误地认为实现
IReadOnlyList
应该意味着列表是不可变的整个讨论。@binki公开了
ILookup
的可变实现如果你计划对它进行变异,这是个坏主意。如果没有文档,您应该能够假设它遵守其接口。当然,现实生活是混乱的,但如果您使用
ToLookup
扩展方法之一创建查找,则可以安全地假定它不会被修改。您可以采用多种方式,但您的
ILookup
类型会员的消费者应该遵循最小惊讶的原则。如果你发现你通过了一个以可观察的方式变异的测试,
抛出
。我的评论中的语法错误:我的意思是你的消费者应该能够假设你遵循了最小惊讶的原则。你的意思是ILookup是IDictionary的只读子集吗?有点。。。但每个元素都是一个iGroup,因此一个键可以有多个元素,因此映射不好。如果字典有一个只读接口,我会很高兴。@Philippe字典的只读接口是
IReadOnlyDictionary
,字典的所有实例都实现了它(
ToDictionary
返回类实例,所以它也可以工作),所以你可以将任何字典公开为只读。@LosFrijoles谢谢,我不知道这本字典存在。我目前一直使用.NET4.0,错误地认为如果不检查MSDN,它是不存在的。