提问者:小点点

ToLookup方法返回查找类吗?


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

所以我的问题是:它是否真的返回lookup类?如果它真的返回了那个类,那么为什么即使文档中说它返回了这个类,也要将它作为接口返回呢?编写(lookup)foo.tolookup(bar)是否安全,或者是否有人编写tolookup的实现,该实现实际上返回一个不同的类,而不是lookup,该类也不能强制转换给它?


共1个答案

匿名用户

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

因此,如果希望安全起见,请使用varilookup声明类型。

通常,返回一个接口而不是具体的实现更好,这样您就可以在不破坏任何代码的情况下自由地更改实现。