Dan*_*eny 15 .net c# generics interface
可能重复:
C# - List <T>或IList <T>
它写的是你应该IList<T>从你的方法返回而不是,List<T>但我找不到任何真正好的理由.我一直在寻找执行此操作的代码,然后调用代码通常执行以下两项操作之一:
new List<T>(returnedIList)它可以使用List上的所有好方法List<T>可以使用List上的所有好方法第一个是笨重的,第二个是抛出(运行时), InvalidCastException如果实现实际上已经改变为其他东西(这使得它完全是愚蠢的).
如果我使用List<T>并且由于某种原因必须将其替换为IList<T>我无法继承的实现,List<T>那么我将得到构建错误并且必须更改一些代码.这可能是非常不可能的,如果发生这种情况,修复工作并不是很多.当然,不值得失去List<T>和/或不得不投射/新List<T>(存在,查找等)的好处,以便让他们回到这种不太可能的情况?
那么,还有其他原因可以归还IList<T>吗?
Jus*_*ner 10
听起来像你在看一些质量差的代码.
返回IList<T>而不是List<T>允许您的代码更灵活.您可以将实现替换为任何实现的集合,IList<T>而不会破坏任何调用代码.这是一件好事...但只有当定义的功能IList<T>符合您的需求时才会这样.
您可以概括地说,您应该始终返回最通用的类型.在大多数情况下,你可以逃脱,IEnumerable<T>但如果你需要更多的功能,那么IList<T>工作.如果没有削减它,返回具体类型并完成它.
在你提到的两种情况中,都需要使用不直接提供的东西IList<T>(如果没有,那么这两种方法都是错误的).在这些情况下,该方法应该返回List<T>以提供所需的功能,或者调用者应该使用另一种方法.
原因是您的方法可以与任何实现 的方法一起使用IList<T>,而不仅仅是 List。然而,情况变得更糟,自从 Linq 出现以来,我开始返回很多东西Enumerable<T>,甚至只是返回IEnumerable!
不过,我不确定我是否理解其中的困难。如果某个东西返回一个实际的列表,并且它的返回取决于该列表,或者它的使用特定于该列表,那么它应该返回List<T>。如果没有,那么您应该不需要将其转换为列表。
| 归档时间: |
|
| 查看次数: |
4852 次 |
| 最近记录: |