首页
学习
活动
专区
圈层
工具
发布

C#语言各种集合介绍

大家好,又见面了,我是全栈君 集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问) 一个集合包括多个元素,即有一个集合类对象和N个元素对象 因为任何集合类都实现了IEnumerable...接口,所以任何集合类对象都有一个GetEnumerator()方法,该方法可以返回一个实现了 IEnumerator接口的对象,这个返回的IEnumerator对象既不是集合类对象,也不是集合的元素类对象...通过这个对象,可以遍历访问集合类对象中的每一个元素对象 如果集合类是用户自定义的集合类,则用户必须实现它的GetEnumerator()方法,否则不能使用循环。...)Queue 实现了接口:ICollection、IEnumerable Queque是队列,先进先出的访问各个元素 可以调用Queque对象的GetEnumerator()方法,得到IEnumerator...对象,来遍历队列中的各个元素 6)Stack 实现了接口:ICollection、IEnumerable Stack是堆栈,后进先出的访问各个元素 可以调用Stack对象的GetEnumerator()

80921
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    c#数组简单知识补充

    System.Collections.IList // 集合的父基类,定义了返回元素数量,复制等一些集合类型最基本的方法,同时提供了可以同步访问ICollection对象元素的方法,数组具有这些能力 System.Collections.ICollection...// 定义迭代遍历的能力,数组可以使用foreach循环 System.Collections.IEnumerable // .net4 新增接口,定义了排序的能力,数据可以进行排序因此而来 System.Collections.IStructuralComparable...// .net4 新增接口,定义比较能力,数组可以比较数组是否具有相同的内容 如果元素数量不同直接返回不相等,同时具有几个元素就会执行几次比较 System.Collections.IStructuralEquatable...System.Collections.Generic.IEnumerable // 只读list,通过索引访问该只读list的元素 System.Collections.Generic.IReadOnlyList... // 只读集合,通过索引访问该只读集合的元素 System.Collections.Generic.IReadOnlyCollection 代码查看: foreach

    30210

    为什么实现 .NET 的 ICollection 集合时需要实现 SyncRoot 属性?如何正确实现这个属性?

    非泛型版本的 ICollection 中有 IsSynchronized 属性和 SyncRoot 属性,这两个属性被用来设计成以线程安全的方式访问和修改集合。...不过这个设计让线程安全的访问有集合的实现方转嫁到了调用方,导致要么很难实现,要么很难调用。...=> this; 嗯,没错,返回了 this,这是各种同步时绝对不应该使用的对象。...然而这个属性都是 public 了,不管返回什么,与 this 还有什么区别…… 关于为什么同步时不应该返回 this 或者返回公开的对象,原因可以看我的另一篇博客: 为什么不应该公开用来同步的加锁对象...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    1.1K30

    C#中如何遍历ArrayList

    (16)的大小来初始化内部的数组 public ArrayList(ICollection); 用一个ICollection对象来构造,并将该集合的元素添加到ArrayList public ArrayList...如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如: ArrayList list = new ArrayList(); //… lock( list.SyncRoot...内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用了lock关键字来保证线程同步。   ...IndexOf、Contains等方法(Sort、BinarySearch等方法经过优化,不在此列)引起的效率损失 首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法...,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList

    1K20

    C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!

    它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。// IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。...Func func1 = () => 42;Func func2 = (s) => s.Length;Predicate 委托:表示一个接受一个参数并返回布尔值的方法...int, string, bool> funcDelegate = (i, s) => i.ToString() == s;// 上述代码中,Func 委托可以引用一个接受一个整数和一个字符串参数,并返回布尔值的方法...这可以通过使用 Select 进行投影,以减少返回的数据量。7、优化查询语句仔细编写LINQ查询,确保生成的查询语句是有效的。...该接口定义了一个方法 GetEnumerator(),该方法返回一个实现了 IEnumerator 接口的对象,用于循环访问集合中的元素。

    41610

    03-EF Core笔记之查询数据

    ToList(); 加载关联数据 EF Core有三种常见模型来加载关联数据: 预先加载:表示从数据库中加载关联数据,作为初始查询的一部分 显式加载:表示稍后从数据库中显式加载关联数据 延迟加载:表示在访问关联数据时...blog => blog.Owner) .ThenInclude(owner => owner.Photo) .ToList(); } 如果更改查询,从而使其不再返回查询以之为开头的实体类型的实例...EF Core还提供了不使用代理的方式进行延迟加载,此方法需要向实体类中注入ILazyLoader实例,并通过该实例实现get访问: public class Blog { private ICollection...使用EF Core延迟加载,可能会造成循环引用,此时无法使用Json.Net进行序列化,需要对此进行一些配置: public void ConfigureServices(IServiceCollection...,如果我们不需要跟踪查询返回的实体,则可以通过AsNoTracking方法禁用跟踪。

    3K20

    C#学习笔记 常用的集合

    重载的Sort()方法可以添加一个比较器, 以实现自定义排序。 可以使用ConvertAll()方法,将一种类型的列表转换为另外一种类型的列表。...队列Queue 队列也就是先进先出(FIFO)的列表,队列实现了ICollection和IEnumberable接口,但是没有实现ICollection接口,因此没有Add()和...也没有实现IList接口,因此不能使用索引器访问。...队列常用的方法和属性如下: 方法或属性说明Count返回队列的元素个数Enqueue该方法在队列末尾添加一个元素Dequeue该方法返回并删除队列头的元素Peek该方法仅返回队列头元素,不删除元素TrimExcess...常用的方法或属性如下: 方法或属性说明Count返回栈中元素的个数Push将一个元素入栈Pop将一个元素出栈并返回Peek返回栈顶元素但不删除Contains判断某个元素是否在栈中 双向链表 LinkedList

    38410

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

    注意,Stack和Queue没有继承ICollection,这是因为ICollection拥有Add,Remove等方法,而栈和队列是不能随便添加删除元素的。...在这里的tail使用求模操作以保证tail不会超过数组长度。如果容量不够,则 Queue根据特定的增长因子扩充数组容量。...注意这个类继承自ICollection,而并没有实现IList,所以你不能通过索引器访问链表。使用情况通常是:当有非常多的在头尾进行的插入删除操作,却只有很少的访问操作时。...因为在删除之前我们仍然需要从 head 开始遍历以找到需要被删除的节点。而删除操作本身则变得简单,即让被删除节点的左节点的 next 指针指向其右节点。...方法GetEnumerator返回一个IEnumerator类型的输出。

    2.3K20

    用C#编程的建议建议收藏

    如果你用ICollection接口来写那段程序,你就不用修改那段程序了,对于任何实现ICollection接口的类型它都能很好的工作: 1 private void LoadList (ICollection...ListBox l) 2 { 3   foreach (object o in items) 4   l.Items.Add (o.ToString ()); 5 }   ICollection...此外,多维数组也支持ICollection接口。如果那还不够的话,数据库.NET类同样支持ICollection接口。用接口写的这个函数不用需改就可以才许多中情况下使用。 2....属性可以让你使用lazy evaluation来返回数据。lazy evaluation的意思是当用户请求时才计算它的值,而不是一直保留着它。   ...这里还有维护方面的因素应当注意:尽管操作两者的方法是一样的,但是你把一个数据元素变成属性,那么原先客户端的程序便不能访问服务端的新版本程序了。

    37020

    从30秒到30毫秒:EF Core查询性能优化实战全记录

    挑战与慢查询分析 我们以一个社交媒体平台为例,包含以下实体: public classUser { publicint Id { get; set; } publicstring Username...; public ICollection Posts { get; set; } = new List(); public ICollection<Comment...; public ICollection Likes { get; set; } = new List(); public ICollection循环中执行两个小查询: • 获取他们评论过的前3篇热门帖子 • 获取这些帖子上的最新2条评论 public List GetTopCommenters_Optimization4...拆分查询(优化6):投影深层图时避免笛卡尔积爆炸 专业建议:考虑为查询中频繁访问的字段添加数据库索引以进一步提升性能。 记住黄金法则:先测量,再优化。通常你会发现查询已经足够快,无需优化。

    24110
    领券