返回收藏品对我们来说哪种类型最好?
我应该使用IList<T>,IEnumerable<T>,IQueryable<T>,别的东西吗?哪个最好,为什么?
我正在尝试决定我应该使用哪种方式,无论是在接口还是我正在编写的几个类的实现中.
编辑让我更进一步,我使用LINQ to SQL通过WCF服务返回数据.感觉这可能会改变最佳使用类型?
使用所有可能的返回类型将符合的最不一般的类型.也就是说,如果您正在查看的方法可能会返回a List<int>或a int[],那么我会输入IEnumerable<int>...如果它可以返回,List<int>或者我List<Employee>或者int[]键入为IEnumerable.如果它总是返回a Collection<Employee>或者Collection<SalariedEmployee>然后返回Collection<Employee>
如果方法将始终生成相同的类型,请使用该类型...
在一个耗时的方法或接口,OTOH,正在返回的对象是在哪里使用,应使用相对理念,键入传入方法参数作为至少一般是由在消费方法的代码的内部功能所需的类型..即,如果所有方法都使用集合对象进行枚举foreach,那么传入的参数类型应该是IEnumerable<>
该框架设计指南状态:
使用
Collection<T>或Collection<T>属性的子类 或返回表示读/写集合的值.Run Code Online (Sandbox Code Playgroud)public Collection<Session> Sessions { get; }使用
ReadOnlyCollection<T>,子类ReadOnlyCollection<T>,或在极少数情况下IEnumerable<T>使用表示只读集合的属性或返回值.Run Code Online (Sandbox Code Playgroud)public ReadOnlyCollection<Session> Sessions { get; }一般来说,更喜欢
ReadOnlyCollection<T>.
关于LINQ,为.NET 3.5创建的指南很明确,但在理由上并没有(imo)完全令人信服:
审查机构明确决定LINQ不应改变本指南["不要返回
IEnumerator<T>,除非作为方法的返回类型GetEnumerator"].如果调用者选择不使用LINQ或不支持LINQ的语言,则他们最终会得到一个笨拙的对象模型.
我默认为 IEnumerable。我正在拍摄要公开的最小界面。两者IList<T>兼而有之。IQueryable<T> IEnumerable<T>因此,除非您对方法有其他特定要求,否则我会选择极简主义并使用最少派生的类型。如果您的调用代码有其他要求,例如索引查找的性能或获取集合中的项目数,那么您可能需要选择其他类型,例如ICollection<T>.
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |