我知道在方法签名中声明接口类型而不是具体类型的好处。我们可以在这里找到很多解释,但我不会列出它们,这不是我的问题所在。
我的问题是关于linq。为什么,当我们看到在API的方法签名中声明接口类型是一种更好的做法时,一些linq扩展方法正在返回具体类型?
例如:
ToList()
返回List<>
而不是IList<>
。ToDictionary()
返回Dictionary<>
而不是IDictionary<>
我很想知道它,因为我计划用我的拥有者扩展Enumerable扩展方法,并且当我记得linq声明具体的实现时,我的良好实践告诉我声明接口类型。
那我该怎么办?声明具体类型或接口类型?
答案 0 :(得分:-2)
IList和IDictionary是这些类型在其定义中应包含的接口(蓝图),而不是可用于类实例的实现。
因为您特别要求List(使用ToList)或Dictionary(使用ToDictionary),所以您将获得List / Dictionary的实际实例。