这个问题的答案似乎很简单。毕竟,如果您从IEnumerable
接口检查Tolookup
方法的文档,那么它会说它返回Lookup
类,而Lookup
类的文档,那么它会说创建它的唯一方法是通过Tolookup
方法。但是,如果您查看Tolookup
方法的类型,那么您很快就会注意到它并不返回lookup
类。相反,它返回ilookup
接口的实例。
所以我的问题是:它是否真的返回lookup
类?如果它真的返回了那个类,那么为什么即使文档中说它返回了这个类,也要将它作为接口返回呢?编写(lookup
是否安全,或者是否有人编写tolookup
的实现,该实现实际上返回一个不同的类,而不是lookup
,该类也不能强制转换给它?
文档并不总是完美的,这里也是如此。实际上,它返回ilookup
的一个实例,当前实现该接口的唯一可用类是lookup
。因此,每当他们决定返回其他内容时,他们就会破坏文档,可能还会破坏现有的代码,这些代码假定始终存在lookup
。
因此,如果希望安全起见,请使用var
或ilookup
声明类型。
通常,返回一个接口而不是具体的实现更好,这样您就可以在不破坏任何代码的情况下自由地更改实现。