首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该返回IEnumerable还是IList?

在开发中,当需要返回一个集合类型的结果时,可以选择返回IEnumerable或IList。这两个接口都是.NET Framework中的集合接口,但在使用时有一些区别。

  1. IEnumerable接口:
    • 概念:IEnumerable接口表示一个可枚举的集合,它提供了一个用于遍历集合的迭代器。
    • 分类:IEnumerable接口属于System.Collections命名空间,是.NET Framework中最基本的集合接口。
    • 优势:返回IEnumerable接口可以提供更好的封装性,隐藏了具体的集合类型,使得代码更加灵活,可以方便地切换不同的集合实现。
    • 应用场景:当只需要对集合进行遍历操作,而不需要修改集合内容时,可以选择返回IEnumerable接口。
    • 推荐的腾讯云相关产品:腾讯云对象存储(COS)是一种高可用、高可靠、安全、低成本的云存储服务,适用于存储和处理大量非结构化数据,可以将数据用作网站内容、备份和存档、企业应用数据、大数据分析等。产品介绍链接地址:https://cloud.tencent.com/product/cos
  2. IList接口:
    • 概念:IList接口表示一个可变大小的索引集合,它继承自IEnumerable接口,并提供了对集合元素的增删改查操作。
    • 分类:IList接口属于System.Collections命名空间,是IEnumerable接口的扩展,提供了更多的集合操作方法。
    • 优势:返回IList接口可以方便地对集合进行增删改查操作,更适用于需要频繁修改集合内容的场景。
    • 应用场景:当需要对集合进行增删改查操作时,可以选择返回IList接口。
    • 推荐的腾讯云相关产品:腾讯云数据库MySQL版是一种稳定可靠、可弹性伸缩的关系型数据库服务,适用于各类在线业务场景,提供高性能、高可用、高可靠的数据库服务。产品介绍链接地址:https://cloud.tencent.com/product/cdb_mysql

需要注意的是,IEnumerable接口和IList接口都是.NET Framework中的接口,并不是腾讯云的产品。腾讯云提供了丰富的云计算产品和服务,可以根据具体需求选择适合的产品来支持开发工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

网页里的「返回应该用 history.back 还是 push ?

这就诞生了新的问题:如果一个列表页A的来源,不止初始页面H,还有多个页面可以跳转列表页A,那么列表页A的网页「返回」按钮,应该返回到哪里呢?...但网页「返回」按钮还有个问题必须解决:若浏览器当前历史记录栈为空,或历史记录栈的上个页面并非该网页的页面,点「返回」,应该也能返回它的父页面。现在告诉你,这个技术难点,是有解的!...4.4 实现方案「返回」按钮,逻辑如下判断历史记录栈的上个页面,是不是的父页面。如果是的父页面,就用history.back(),使用浏览器原生返回行为。...与此同时,还没剥夺用户使用原生「返回」的权利。...总算是完成了令我满意的「返回」如果你想体验的游戏,看看「返回」的交互,欢迎访问 game.hullqin.cn写在最后是HullQin,公众号线下聚会游戏的作者(欢迎关注,交个朋友)。

5K61
  • WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)

    比如,在同一个服务契约中,定义了如下3个操作,他们的参数类型分别为IEnumerableIList和Customer[]。...[]与通过IList表示也具有等效性,我们能否让数组类型变成IList类型呢,毕竟从编程角度来看,它们还是不同的,很多时候使用IList要比直接使用数组方便得多。...但是对于不能预先确定元素类型的IEnumerableIList就不一样了。 下面将演示IEnumerableIList两种类型的序列化。...}); 无论是基于IEnumerable类型,还是基于IList,最终序列化生成的XML都是一样的。...、IEnumerableIListIList还是现在介绍的Hashtable和IDictionary,最终序列化的都是ArrayOfXxx。

    1.5K70

    .NET面试题系列 - IEnumerable的派生类

    自己实现一个栈还是比较简单的,可以借助List进行存储。 Stack应用一例:测试回文字符串 所谓回文是指向前和向后拼写都完全一样的字符串。...字典的实现原理前面已经说过了,它和哈希表的实现原理有所不同,但它最大的优势还是在于泛型。...提供索引器 List 索引器 IList 继承了Ilist(以及其他接口) ArrayList的泛型版本 最常用的泛型集合 如果不需要很强的功能,可以考虑用IEnumerable...替代作为返回类型 IQueryable 通过IndexOf IEnumerable 从远端获得筛选之后的资料,和IEnumerable不同,IQueryable返回所有资料然后才进行筛选...在遇到数组查重问题时,哈希永远都是一个利器:https://www.zhihu.com/question/31201024 IEnumerable最重要的一个派生类就是IList接口。

    1.7K20

    在C++中反射调用.NET(三) 使用非泛型集合的委托方法C++中的列表对象list C++传递集合数据给.NET创建泛型List实例反射静态方法反射调用索引器当委托遇到协变和逆变C++CLI

    使用非泛型集合的委托方法 先看看.NET类中的一个返回列表数据的方法: //返回List或者数组,不影响 C++调用 public List GetUsers(string...注意,这里传递的还是.NET的集合,所以这里需要做3件事情: 1,首先构建一个.NET集合对象; 2,转换C++本机结构数据到.NET集合元素; 3,反射调用.NET方法,传递数据过去。...,但我们并不知道这个List具体的形参类型,所以这个泛型List还是无法直接使用,幸好,泛型List也是继承自非泛型的IList接口的,所以在 CreateGenericList 方法中将泛型List对象转换成...IList接口对象,之后就可以愉快的使用List对象了。...> fun; Func fun2; 这里,fun,fun2都可以绑定到方法上,因为泛型方法的形参作为返回值,是out的,可以使用派生程度更小的类型

    9K100

    C#语言各种集合介绍

    大家好,又见面了,是全栈君 集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问) 一个集合包括多个元素,即有一个集合类对象和N个元素对象 因为任何集合类都实现了IEnumerable...接口,所以任何集合类对象都有一个GetEnumerator()方法,该方法可以返回一个实现了 IEnumerator接口的对象,这个返回的IEnumerator对象既不是集合类对象,也不是集合的元素类对象...,该枚举数支持在集合上进行简单迭代 它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合 基本上所有的集合类都实现了这个接口 3)IList...IList实现是可排序且可按照索引访问其成员的值的集合,它本身实现了ICollection和IEnumerable接口 是所有列表的抽象基类。...IList 实现有三种类别:只读、固定大小、可变大小。

    61121

    .NET中的泛型集合

    - IListIList IList则是直接继承自ICollection和IEnumerable。所以它包括两者的功能,并且支持根据下标访问和添加元素。...通常倾向于将接口作为方法和属性的返回类型,而不是保证一个特定的实现类。在API中公开易变集合之前,你也应该深思熟虑,特别是当集合代表的是对象或类型的状态时。...它实现了IList,因此也实现了ICollection、IEnumerableIEnumerable。...尽管LinkedList实现了Add等标准方法(向链表末尾添加节点),还是建议使用显式的AddFirst和AddLast方法,这样可以使意图更清晰。...尽管如此,还是有必要了解一下的,以便知道它们不是什么。图B-2展示了三个接口间以及和IEnumerable接口的关系。

    17820

    c#数组简单知识补充

    c#数组的几个简单的补充 数组是引用类型,不论其元素是值类型还是引用类型。...System.Collections.IList // 集合的父基类,定义了返回元素数量,复制等一些集合类型最基本的方法,同时提供了可以同步访问ICollection对象元素的方法,数组具有这些能力 System.Collections.ICollection...// .net4 新增接口,定义比较能力,数组可以比较数组是否具有相同的内容 如果元素数量不同直接返回不相等,同时具有几个元素就会执行几次比较 System.Collections.IStructuralEquatable...所有的数组默认继承自Array抽象类,该类实现了如上的接口,但在查看源码不能看到数组实现如下接口,这些接口实在CLR动态为一维数组实现如下的接口 */ System.Collections.Generic.IList...这些动作是由CLR (公共语言运行时)执行的,内部原理并不清楚,但一般而言linq查询是对集合进行操作,数组属于集合,但由于存在多维数组,数组不能直接实现IEnumerable泛型接口获取linq查询的能力

    14210

    C#集合类型大盘点

    public interface IEnumerable { IEnumerator GetEnumerator(); }   注意:我们经常用的foreach即是一种语法糖,实际上还是调用Enumerator...: 如果我们集合是通过封装其它集合类而来的,那么我们可以直接返回这个集合的enumerator 通过yield return 来返回 实现我们自己的IEnumerator来实现   这里给大家演示一下如何通过...yield来实现返回enumerator public class BuddyList : IEnumerable { private string[] data= new string[]...IListIList   IList则是直接继承自ICollection和IEnumerable。所以它包括两者的功能,并且支持根据下标访问和添加元素。...我们可以这样说,IEnumerable支持的功能最少,只有遍历。而ICollection支持的功能稍微多一点,不仅有遍历还有维护这个集合的功能。而IList是最全的版本。

    1K70

    C#反射与特性(三):反射类型的成员

    public void Test(){} 这样的形式; 函数,指具有确定命名的、并且可以通过名称调用的代码,属性、字段、方法、委托、事件等; 只要能够通过确定的名称调用(使用)的代码块,就是函数;而方法就是 返回值...`1 *************** IList`1 ICollection`1 IEnumerable`1 IEnumerable IList ICollection IReadOnlyList`1...IReadOnlyCollection`1 注意的是,如果要通过名称获取接口 Type ,需要使用 泛型类别的名称,例如 IList1`。...到底是 Type 里面的字段都是 Public 的,还是反射只能获取到类型 Public 字段? 我们通过实验验证一下。...view=netcore-3.1 1.2.5 事件 使用 GetEvent() 或 GetEvents() 可以获取类型的事件列表,返回 EventInfo / EventInfo[] 类型。

    1K40

    Thinking In Design Pattern——MVP模式演绎

    下面的将以一个简单的案例(出自《ASP.NET》设计模式)详解MVP思想的应用,当然MVP和MVC一样都是属于表现层的设计模式,将参考上述两幅图中的分层思想来创建应用程序,下图为分层体系结构创建完毕时解决方案目录...GetBasketProducts(); } } public void Add(Model.Product product) { IList...> GetBasketProducts() { var products = HttpContext.Current.Session["Basket"] as IList...“所以我更倾向于View并不知道按钮点击后回发生什么事,如Update数据,但是点击后界面有什么光线,水纹,这个应该是View关心的,View应该更注重的是和用户交互的反应。”...使用Ioc容器如StructureMap,首先配置依赖关系(即当向Ioc容器询问特定的类型时将返回一个具体的实现),所以这又叫依赖注入: public class BootStrapper {

    816100

    31天重构学习笔记1. 封装集合

    当然重构的整体架构得另当别论(整体架构在的这篇文章有专门的讲解(http://www.cnblogs.com/zenghongliang/archive/2010/06/23/1763438.html...那么这些文章也都是学习Sean Chambers的31天重构的笔记整理,所以如果大家对这个笔记有任何异议也可以指出。...比如最经典的属性对字段的封装就是一个很好的例子,那么下面我们将看到对集合的封装,如下代码所示,调用端只需要一个集合的信息,而我们则提供了一个IList的集合,大家都知道IList具有对集合的所有操作,所以这会带来很多隐患...换成了IEnumerable,大家都知道只包括一个返回值为IEnumerator的GetEnumerator()方法,所以这样只能遍历取出它的值,而不能对这个集合做出改变,这正是我们所需要的结果,具体代码如下...{ private List _orderLines; private double _orderTotal; public IEnumerable

    49720

    ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

    ,,,去,可以哇!那么是不是ExecuteReader容易有啥坑的问题呢?想了想,对头,是不是返回的reader有点问题? ? 先关了看看~去,有值了!不会这么容易就搞定了吧?不行,得再试试 ?...不能就这样算了啊,不能总自己写吧,sqlhelper的问题还是得解决 ? 去,还是没有。。。。。。。这可不行,看看sqlhelper的源码怎么搞的 ? 万恶的清除啊!再试试 ?...扩:一般很少直接返回SqlDataReader对象的, ?...贴一个比较弱的转换(有更好的可以贴评论中的,就先抛个砖头) public static IEnumerable SqlDataReaderToList(SqlDataReader reader...using (reader) { if (reader.HasRows) { IList

    1.3K70

    自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧

    看代码应该是 equals 比较时产生的,一次比较就有2个point被装箱放到托管堆上,这下惨了,,,而且大家应该知道引用对象本身还有(8+8) byte 自带开销,这在时间和空间上都是巨大的浪费呀。。...,还是int,貌似的Point就比int少了接口实现,问题应该就出在这里,而且最后一个泛型接口IEquatable特别显眼,看下定义: public interface IEquatable...public class List : IList, ICollection, IEnumerable, IEnumerable, IList, ICollection, IReadOnlyList...因为这里的runtimeType实现了IEquatable接口,所以代码返回了一个泛型比较器:GenericEqualityComparer,然后我们继续查看这个泛型比较器是咋样的。 ?...从图中可以看到最终还是对T进行了IEquatable约束,不过这里给提取出来了,还是挺厉害的,然后也学的模仿一下: ? 可以看到也走了的自定义实现,两种方式大家都可以用哈。

    33120

    31天重构学习笔记1. 封装集合

    当然重构的整体架构得另当别论(整体架构在的这篇文章有专门的讲解(http://www.cnblogs.com/zenghongliang/archive/2010/06/23/1763438.html...那么这些文章也都是学习Sean Chambers的31天重构的笔记整理,所以如果大家对这个笔记有任何异议也可以指出。 概念:本文所讲的封装集合就是把集合进行封装,只提供调用端需要的接口。...比如最经典的属性对字段的封装就是一个很好的例子,那么下面我们将看到对集合的封装,如下代码所示,调用端只需要一个集合的信息,而我们则提供了一个IList的集合,大家都知道IList具有对集合的所有操作,所以这会带来很多隐患...换成了IEnumerable,大家都知道只包括一个返回值为IEnumerator的GetEnumerator()方法,所以这样只能遍历取出它的值,而不能对这个集合做出改变,这正是我们所需要的结果,具体代码如下...{ private List _orderLines; private double _orderTotal; public IEnumerable

    554110
    领券