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

.NET面试题系列 - IEnumerable派生

注意这个继承自ICollection,而并没有实现IList,所以你不能通过索引器访问链表。使用情况通常是:当有非常多在头尾进行插入删除操作,却只有很少访问操作时。...IEnumerable派生:小结 访问方式 继承自 特点 IEnumerable 通过ElementAt 无 所有泛型集合都继承自此接口 有非泛型版本 提供遍历(通过GetEnumerator...返回所有资料然后才进行筛选 可通过sql profiler看到区别 注:还有若干重要派生例如Concurrent类型,这些放到多线程同步中。...在遇到数组查重问题时,哈希永远都是一个利器:https://www.zhihu.com/question/31201024 IEnumerable最重要一个派生就是IList接口。...它又有两个主要派生Array和ListList内部实现是一个数组而不是链表。LinkedList才是C#链表实现。LinkedList不实现IList接口。

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

C#语言各种集合介绍

中表示集合行为接口有: 1)ICollection 定义所有集合大小、枚举数和同步方法。...派生于IEnumerable 它定义了集合最基本行为,所有的集合都实现了这个接口(基接口) 但是它行为太过基本:主要就是一个Count属性,单独实现它没有太大意义 2)IEnumerable 公开枚举数...IList实现是可排序且可按照索引访问其成员集合,它本身实现了ICollection和IEnumerable接口 是所有列表抽象基。...IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值 2.System.Collections中可以直接使用集合有: 1)ArrayList 实现了接口:IList、ICollection...                   Add                    Insert          Remove          Item           Sort                   Find List

58921

# C#学习-泛型-集合-堆栈-队列-哈希-字典

where T:new() :表示这个泛型具有一个无参数构造方法,如果有多个约束,new()必须放在最后 where T:基名 :表示这个泛型是该基或者其派生 where T:接口名 :表示泛型是为了实现该接口类型...where T:U :为T提供类型参数必须是为U提供参数或派生自为U提供参数。...实现了ICollection和IList和IEnumerable接口 灵活设置数组大小 不安全集合类型 其元素为值类型时,效率不高(装箱和拆箱耗性能) ArrayList常用方法与描述 List...泛型动态数组 List是ArrayList泛型等效 同样实现了IList接口,IEnumrator接口和ICollection 与ArrayList不同是,声明集合时需要声明集合内部数据类型...,即T类型 安全集合类型 某种情况时,在处理值类型时其处理速度比ArrayList快得多 LIst常用方法与描述 常见集合和列表实现接口 练习 利用ArrayList或者是List做一个小型学生管理系统

90620

快速入门系列--CLR--03泛型集合

IEnumerable,其可以获取一个IEnumerator迭代器,如果数据库角度来看,前者是表,后者是游标,同时这两个接口是唯一具有可变性集合接口。...ICollection,它扩展了IEnumerable,添加了Count和IsReadOnly属性,Add和Remove等操作方法,Contains等判定函数,所有的标准泛型集合都实现了该接口...List,其是列表默认选择,内含一个数组,并且提供列表逻辑大小Count和后台数组大小Capacity,当数组满了时,会进行扩容。...数组,最基础集合,均派生自System.Array,包括一维数组T[10],二维数组T[10, 20]等,通过Array静态方法进行ConvertAll、FindAll和BinarySearch等操作...Stack,其实现更简单,可以看做是一个提供Push、Pop、Peek操作List。 最后介绍并行集合,也就是线程安全集合。

72370

一文搞定泛型知识

List SelectAll() { //more code } //more code } 前面这段代码我们定义了操作数据库泛型,这个可以被项目中所有需要操作数据库使用...我们先来看一下代码: public interface IDemo { ICollection items {get;set;} } public class Demo:IDemo...在这里我通过简单几句来说一下约束继承。首先无论是泛型类型参数还是它们约束都不会被 派生 继承,这是因为泛型类型参数和约束不是成员。虽然不能被派生继承,但是可以被派生泛型所继承。...首先无论是泛型类型参数还是它们约束都不会被 派生 继承,这是因为泛型类型参数和约束不是成员。虽然不能被派生继承,但是可以被派生泛型所继承。...由于派生泛型类型参数时泛型基类型实参,所以类型参数必须具有等同于或者强于泛型基约束条件。 Tip 2:泛型方法同样也可以使用约束,约束条件和泛型类似。

96010

.NET面试题系列 - IEnumerable派生

(注意非泛型版本ICollection并没有Add,Remove等方法)但在实际情况中,我们通常使用ICollection继承而不是ICollection本身(不能初始化一个接口)。...ICollection继承有Stack,Queue,IDictionary和IList。 IList本身实现了索引器。...ArrayList是C#最不常用(我想不出任何用它理由)也是最基础一个动态数组。 通常我们在说ArrayList时,总是和List和普通数组(无法扩容)进行比较。...ArrayList派生自IList,所以其是一个非泛型集合。IList继承ICollection,同时,其增加了Add,Remove等方法。可以修改集合内容。...IEnumerable派生:小结 访问特定位置成员方式 继承自 特点 IEnumerable 通过ElementAt 无 有泛型版本 提供遍历(通过GetEnumerator) 不能实例化(

81020

C#集合类型大盘点

俗话说知其然,知其所以然,平常看到IEnumerable,IEnumerator,ICollection是不是知道他们之间各自区别?除了List和Dictionary以外,你还用过哪些其它集合?...和ICollection   最上面第一张图我们可以知道,ICollection是直接继承自IEnumerable。...ICollectionICollection 略有不同,ICollection不提供编辑集合功能,即Add和Remove。包括检查元素是否存在Contains也不支持。...List LinkedList HashSet SortedSet Stack Queue List   泛型List 提供了不限制长度集合类型,List...现在基本上我们已经不使用这些集合了,除非在做一些和老代码保持兼容工作时候。来看看1.0时代.NET程序员们都有哪些集合可以用。 ArraryList 后来被List替代。

1K70

CA1710:标识符应具有正确后缀

规则说明 按照约定,扩展某些基类型或实现某些接口类型名称,或者由这些类型派生类型名称应具有与相应基类型或接口关联后缀。 命名约定为面向公共语言运行时库提供通用外观。...这些集合通过 System.Data.InternalDataCollectionBase 基实现 ICollection。 如何解决冲突 重命名该类型,使其带有正确字词后缀。...对于其他后缀,请勿禁止显示此规则发出警告。 通过后缀能够类型名称中看出预期用途。 配置代码以进行分析 使用下面的选项来配置代码库哪些部分要运行此规则。..., internal 排除间接基类型 可以配置是否规则中排除间接基类型。...可用以下任意一种格式指定类型: 仅类型名称(包括具有相应名称所有类型,不考虑包含类型或命名空间) 完全限定名称,使用符号文档 ID 格式,前缀为 T:(可选)。

92200

自定义Dictionary支持线程安全

这样即使多个线程来访问它,它也不会产生对线程来说很意外数据。 C#中Dictionary不是线程安全,我在下面这个例子中,把一个Dictionary对象作为了全局static变量。...所以我需要包装一下.net自带Dictionrary. 发生冲突部分无非是写地方,所以在离写Dictionary最近地方加一个锁。其他外层代码可以自带Dictionary相同了。...我们看Dictionary实现接口, 自定义一个线程安全数据对象。...).aspx http://www.cnblogs.com/atskyline/p/3234805.html 4.0中新增线程安全集合: 线程安全集合 非线程安全集合 ConcurrentQueue... Queue ConcurrentStack Stack ConcurrentBag List ConcurrentDictionary Dictionary

1K10

编写高质量代码改善C#程序157个建议

本文主要学习记录以下内容:   建议23、避免将List作为自定义集合    建议24、迭代器应该是只读   建议25、谨慎集合属性可写操作 建议23、避免将List作为自定义集合... 如果要实现一个自定义集合,最好不要以List作为基,而应该扩展相应泛型接口,通常是Ienumerable和ICollection(或ICollection子接口,如...> 不过,遗憾是继承List并没有带来任何继承上优势,反而丧失了面向接口编程带来灵活性,而且可能不稍加注意,隐含Bug就会接踵而至。...线程t2也许是另一个程序猿写,但他看到只有list,结果,针对list修改会直接影响到另一个工作线程中对象。...在例子中,我们将list赋值为null,模拟在StudentTeamA(或者说工作线程t1)不知情情况下使得集合属性变为null。

55430

.NET中泛型集合

各集合底层接口关系图 泛型与非泛型集合分析 泛型集合是类型安全,基于固定泛型T,运行时不需要像非泛型执行Object和具体类型类型转换。 泛型集合效率相对较高。...- ICollectionICollection 最上面第一张图我们可以知道,ICollection是直接继承自IEnumerable。...此外,它还实现了非泛型ICollection和IList接口,并在必要时进行装箱和拆箱,以及进行执行时类型检查,以保证新元素始终与T兼容。...List中移除元素需要复制所有的后续元素,因此其复杂度为O(n – k),其中k为移除元素索引。列表尾部移除要比从头部移除廉价得多。...KeyedCollection为抽象派生将实现GetKeyForItem方法,可以列表中任意项中提取键。在我们这个客户示例中,GetKeyForItem方法返回给定客户ID。

14920

asp.net web api 2.2 基础框架(带例子)

,按约定使用Model名+Configuration作为fluent api名字,并需要继承EntityBaseConfiguration这个,这个对EntityBase几个属性进行了映射配置...不同是,它需要继承是TreeEntityBase这个基,TreeEntityBase代码如下: using System.Collections.Generic; using LegacyApplication.Shared.Features.Base...该Modelfluent api配置需要继承是TreeEntityBaseConfiguration这个,代码如下: using System.Collections.Generic; using...(也就是LegacyApplication.Models这个项目)里面所有的fluent api配置(EntityTypeConfiguration派生)全部加载进来。...这里说一下CoreContext,由于它派生与DbContext,而DbContext本身就实现了Unit of Work 模式,所以我做Unit of work模式时候,就不考虑重新建立一个新作为

4.9K90

c#数组简单知识补充

,有索引器,查询元素位置,插入数据,移除索引位置数据这个方法,简单可以当作存放数据容器,不能像List那样具有很多数据处理方法。...System.Collections.IList // 集合父基,定义了返回元素数量,复制等一些集合类型最基本方法,同时提供了可以同步访问ICollection对象元素方法,数组具有这些能力 System.Collections.ICollection...// 也提供了索引器,删除插入查询数据几个方法,但是是泛型数据 /* 特殊,所有的数组默认继承自Array抽象,该类实现了如上接口,但在查看源码不能看到数组实现如下接口,这些接口实在CLR动态为一维数组实现如下接口...*/ System.Collections.Generic.IList // 提供泛型能力,也有基本增删改查功能 System.Collections.Generic.ICollection...System.Collections.Generic.IEnumerable // 只读list,通过索引访问该只读list元素 System.Collections.Generic.IReadOnlyList

13010
领券