当前位置:网站首页>c#数组补充
c#数组补充
2022-07-04 12:42:00 【华为云】
c#数组的几个简单的补充
数组是引用类型,不论其元素是值类型还是引用类型。
c#中数组对象实现的各个接口:
// 定义了浅拷贝的能力,因此数组可以进行浅拷贝System.ICloneable// ICollection接口的子代,使用接口编程减轻耦合,该接口只定义了一些方法,有索引器,查询元素位置,插入数据,移除索引位置数据这个方法,简单的可以当作存放数据的容器,不能像List那样具有很多数据处理的方法。System.Collections.IList// 集合的父基类,定义了返回元素数量,复制等一些集合类型最基本的方法,同时提供了可以同步访问ICollection对象元素的方法,数组具有这些能力System.Collections.ICollection// 定义迭代遍历的能力,数组可以使用foreach循环System.Collections.IEnumerable// .net4 新增接口,定义了排序的能力,数据可以进行排序因此而来System.Collections.IStructuralComparable// .net4 新增接口,定义比较能力,数组可以比较数组是否具有相同的内容如果元素数量不同直接返回不相等,同时具有几个元素就会执行几次比较System.Collections.IStructuralEquatable// 也提供了索引器,删除插入查询数据几个方法,但是是泛型数据/* 特殊的,所有的数组默认继承自Array抽象类,该类实现了如上的接口,但在查看源码不能看到数组实现如下接口,这些接口实在CLR动态为一维数组实现如下的接口 */System.Collections.Generic.IList <T>// 提供泛型的能力,也有基本的增删改查的功能System.Collections.Generic.ICollection <T>// 一个类型可以使用linq迭代,必须实现改接口,因此数组可以使用linq查询。System.Collections.Generic.IEnumerable <T>// 只读list,通过索引访问该只读list的元素System.Collections.Generic.IReadOnlyList <T>// 只读集合,通过索引访问该只读集合的元素System.Collections.Generic.IReadOnlyCollection <T>
代码查看:
foreach (var type in (new int[0,0]).GetType().GetInterfaces()) Console.WriteLine(type);
通过执行该代码,当创建的数组是一维数组时,该数组对象会实现泛型接口,可以拥有linq查询的能力,但当不是一维数组时,此时的数据就不具有linq的能力,此时的数组对象不实现泛型接口。
这些动作是由CLR (公共语言运行时)执行的,内部原理并不清楚,但一般而言linq查询是对集合进行操作,数组属于集合,但由于存在多维数组,数组不能直接实现IEnumerable泛型接口获取linq查询的能力,而是在托管代码运行时由CLR负责处理,对一维数组赋予接口能力,非一维数组不能拥有接口能力。
当然上面这些都是对引用类型而言,值类型不会有这种动态赋予接口能力的操作。
边栏推荐
- go-zero微服务实战系列(九、极致优化秒杀性能)
- Efficient! Build FTP working environment with virtual users
- 聊聊支付流程的设计与实现逻辑
- DVWA range exercise 4
- Iptables foundation and Samba configuration examples
- Meituan Ali's Application Practice on multimodal recall
- It is six orders of magnitude faster than the quantum chemical method. An adiabatic artificial neural network method based on adiabatic state can accelerate the simulation of dual nitrogen benzene der
- 7、 Software package management
- runc hang 导致 Kubernetes 节点 NotReady
- Read the BGP agreement in 6 minutes.
猜你喜欢
DC-5 target
CA:用于移动端的高效坐标注意力机制 | CVPR 2021
[cloud native | kubernetes] in depth understanding of ingress (12)
Transformer principle and code elaboration (pytorch)
Understand bloomfilter in one article
【Android Kotlin】lambda的返回语句和匿名函数
2022年中国移动阅读市场年度综合分析
ArcGIS uses grid processing tools for image clipping
AI 绘画极简教程
MDK在头文件中使用预编译器时,#ifdef 无效的问题
随机推荐
Rsyslog configuration and use tutorial
读《认知觉醒》
Alibaba cloud award winning experience: build a highly available system with polardb-x
Using nsproxy to forward messages
洞见科技解决方案总监薛婧:联邦学习助力数据要素安全流通
室外LED屏幕防水吗?
CVPR 2022 | transfusion: Lidar camera fusion for 3D target detection with transformer
[AI system frontier dynamics, issue 40] Hinton: my deep learning career and research mind method; Google refutes rumors and gives up tensorflow; The apotheosis framework is officially open source
runc hang 导致 Kubernetes 节点 NotReady
golang 设置goproxy代理的小细节,适用于go module下载超时,阿里云镜像go module下载超时
CANN算子:利用迭代器高效实现Tensor数据切割分块处理
Definition of cognition
模块化笔记软件综合评测:Craft、Notion、FlowUs
"Pre training weekly" issue 52: shielding visual pre training and goal-oriented dialogue
"Tips" to slim down Seurat objects
Rsyslog配置及使用教程
WPF double slider control and forced capture of mouse event focus
runc hang 导致 Kubernetes 节点 NotReady
After the game starts, you will be prompted to install HMS core. Click Cancel, and you will not be prompted to install HMS core again (initialization failure returns 907135003)
PostgreSQL 9.1 soaring Road