C#编程(三十四)----------数组作为参数
原文链接: http://blog.csdn.net/shanyongxu/article/details/46765267
数组作为参数
数组可以作为参数传递给方法,也可以从方法中返回.要返回一个数组,只需要把数组声明为返回类型.
static void Main(string[] args)
{
int[] array = { 1, 2, 3, 4, 5, 6 };
PrintArray(new int[] { 1, 2, 3, 4, 5, 6, 7 });
PrintArray(array);
}
static void PrintArray(int[] arr)
{
foreach (var item in arr)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
返回一个数组:
static void Main(string[] args)
{
int[] array = GetArray(new int[] { 1, 2, 3, 4, 5, 6, 7 });
foreach (var item in array)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
static int [] GetArray(int[] arr)
{
return arr;
}
数组协变
数组支持协变,这表示数组可以声明为基类,其派生类型的元素可以赋予数组元素.例如,可以声明一个object[]类型的参数,给它传递一个Person[];
注意:数组协变只能用语音与类型,不能用于值类型.
数组协变有一个问题,它只能通过运行时异常来解决.如果把Person数组赋予object数组,object数组就可以使用派生自object的任何元素.例如,编译器允许把字符串传递给数组元素,但因为object数组引用Person数组,所以会出现一个运行时异常.
ArraySegment<T>
static void Main(string[] args)
{
string[] array = {"zhangsan","lisi","wangwu","zhaoliu" };
//将该数组放到ArraySegment
ArraySegment<string> arrayStr = new ArraySegment<string>(array);
//只能用for输出,不能使用foreach
for (int i = arrayStr.Offset; i < (arrayStr.Offset+arrayStr.Count); i++)
{
Console.WriteLine(" [{0}] : {1}",i,arrayStr.Array[i]);
}
//选取数组中的一段,从下标为1的元素开始,取3个.选取的结果为下标为1,2,3的元素
//ArraySegment<string> subArray = new ArraySegment<string>(array, 1, 3);
Console.ReadKey();
}
多个ArraySegment实例可以引用同一个原始数组,从而可能发生重叠.Array属性返回整个原始数组.而不是该数组的副本.
所以使用: arrayStr.Array[2] = "hahaha";
数组是变成:zhangsan lisi hahaha zhaoliu
应用:ArraySegment可以用在内存碎片较多的地方,来减少内存碎片的产生,以便使内存碎片更有序,提高我们的程序性能.
比如Socket.BeginReceive异步接收频繁的时候,我们并不知道要接受的这个buffer长度,所以就预先设置一个固定值,这时候这块内存就会被pin住,一直等到网络硬件接收到数据完成为止,这往往比较容易产生碎片,如果你用windbg一看,!DumpHeap -type Free -stat会有很多objects但是值都是0.所以可以用ArraySegment+Stack来解决
C#编程(三十四)----------数组作为参数的更多相关文章
- “全栈2019”Java第三十四章:可变参数列表
		难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ... 
- spring boot 常见三十四问
		Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ... 
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
		孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ... 
- NeHe OpenGL教程 第三十四课:地形
		转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ... 
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
		JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接 ... 
- 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息
		第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ... 
- 微信小程序把玩(三十四)Audio API
		原文:微信小程序把玩(三十四)Audio API 没啥可值得太注意的地方 重要属性: 1. wx.getBackgroundAudioPlayerState(object) 获取播放状态 2.wx.p ... 
- FreeSql (三十四)CodeFirst 迁移说明
		FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能. 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也 ... 
- 剑指Offer(三十四):第一个只出现一次的字符
		剑指Offer(三十四):第一个只出现一次的字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ... 
- COJ966 WZJ的数据结构(负三十四)
		WZJ的数据结构(负三十四) 难度级别:C: 运行时间限制:20000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给一棵n个节点的树,请对于形如"u ... 
随机推荐
- centos6.5环境通过rpm包安装mysql5.5.51数据库
			centos6.5环境通过rpm包安装mysql5.5.51数据库 注意:此方法适用于单独安装数据库的需求,如果在该机器上还需要安装php环境,建议mysql通过编译或yum方式安装 1.查找已经安装 ... 
- css1-puchong1
			HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 一:HTML DOM 树 ... 
- tensorflow实现猫狗大战(分类算法)
			本次使用了tensorflow高级API,在规范化网络编程做出了尝试. 第一步:准备好需要的库 tensorflow-gpu 1.8.0 opencv-python 3.3.1 numpy ... 
- 使用VSCode创建.NET Core 项目,添加类库间引用
			注:网络上搜索到的关于VsCode创建调试.Net Core 项目的文章都比较老旧,不能完全参考使用,根据网络文章.微软官方文档的指导下,学习并整理此文档,但也大体和文档学习路线相似,主要为记录学习过 ... 
- AxureRP8实战手册
			基础操作篇 本篇包含56种常见的基础操作,初学者应在掌握本篇内容后再进行实战案例篇的学习,以免产生学习障碍.同时,建议具备一定基础的读者学习本篇中相对生疏的内容,并加以掌握. 第1章 使用元件 本文目 ... 
- USING NHIBERNATE WITH MySQL
			In previous USING NHIBERNATE WITH SQLITE, we connect SQLITE with ORM framework NHibernate. One of th ... 
- hdu 5428 质因子
			问题描述有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大.幸运的是,FancyCoder只需要找到这个巨大乘积的最小的满足如下规则的因子:这个因子包含大于两个 ... 
- P1508 Likecloud-吃、吃、吃  DP
			题目背景 问世间,青春期为何物? 答曰:“甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!” 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日上课,正当他饿得头昏 ... 
- catalan数的新理解
			catalan数的新理解h[5]==h[4][0]+h[3][1]+h[2][2]+h[1][3]+h[0][4];对于这种递推式就是catalan数 
- Android-Toolbar相关
			Android-Toolbar相关 学习自 <Android第一行代码> https://www.jianshu.com/p/79604c3ddcae https://www.jiansh ... 
