Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# ToLookup方法是否返回Lookup类?_C#_Ienumerable - Fatal编程技术网

C# ToLookup方法是否返回Lookup类?

C# ToLookup方法是否返回Lookup类?,c#,ienumerable,C#,Ienumerable,这个问题的答案似乎很简单。毕竟,如果您从IEnumerable接口检查ToLookup方法的文档,它会说它返回Lookup类,而Lookup类的文档,那么它会说创建它的唯一方法是通过ToLookup方法。但是,如果查看ToLookup方法的类型,您会很快注意到它不会返回Lookup类。相反,它返回ILookup接口的一个实例 所以我的问题是:它是否真的返回Lookup类?如果它确实返回了该类,那么即使文档中说它返回了该类,但它作为接口返回该类的原因是什么?写(Lookup)foo.ToLooku

这个问题的答案似乎很简单。毕竟,如果您从
IEnumerable
接口检查
ToLookup
方法的文档,它会说它返回
Lookup
类,而
Lookup
类的文档,那么它会说创建它的唯一方法是通过
ToLookup
方法。但是,如果查看
ToLookup
方法的类型,您会很快注意到它不会返回
Lookup
类。相反,它返回
ILookup
接口的一个实例


所以我的问题是:它是否真的返回
Lookup
类?如果它确实返回了该类,那么即使文档中说它返回了该类,但它作为接口返回该类的原因是什么?写
(Lookup)foo.ToLookup(bar)
安全吗?或者有人能写一个
ToLookup
的实现,它实际上返回一个不同的类,而不是
Lookup
,它也不能被转换成它吗?

文档并不总是完美的,这里也是如此。实际上,它返回了
ILookup
的一个实例,当前实现该接口的唯一可用类是
Lookup
。因此,每当他们决定返回其他内容时,他们都会破坏文档,可能还会破坏现有代码,这些代码假定总是有一个
查找

因此,如果您想安全起见,请使用
var
ILookup
声明类型


一般来说,最好返回一个接口,而不是一个具体的实现,因此您可以在不破坏任何代码的情况下自由更改实现。

它返回一个
Lookup
类的实例,该类实现了
ILookup
接口。您实际上提出了三个不同的问题,有三个不同的答案。你特别想回答哪一个问题?我应该在这个网站上把它分成3个不同的问题吗?主要是第一个,但其他的也有很大的关联。这不是不真实的。ILookup有两种实现,它们都称为查找。不明显的是System.Linq.Parallel.Lookup,它是内部的。Brr,任何名称中带有“parallel”的东西似乎都是一群牛仔写的。@因此,通过
ToLookup()
返回的具体实例取决于实现。像这样检查源代码。为什么知道实现
ILookup
接口的类实际上是否是
System.Linq.Lookup
类很重要?“更好地返回实例”应该是“更好地返回接口”,对吗?@devNull:是的,当然,修复了它