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 ...
随机推荐
- Linux删除以减号开头的文件
2014年5月5日 10:33:47 原因:文件乱码了,乱码后以减号开头,删不掉 摘抄: 文件系统出现一个文件 -C.html 如何删除/新建?rm -- "-C.html" to ...
- js array数组检测方式
typeof var arr = [1,2,3]; console.log(typeof arr);//'object' 数组的本质是一种特殊的对象,所以返回'object'.typeof运算符只能用 ...
- Python_oldboy_自动化运维之路_paramiko,mysql(十二)
本节内容: paramiko mysql 1.paramiko http://www.cnblogs.com/wupeiqi/articles/5095821.html paramiko是一个模块,s ...
- KNN算法的感受 2
(1):先将上述代码保存为kNN.py (2):再在IDLE下的run菜单下run一下,将其生成python模块 (3):import kNN(因为上一步已经生成knn模块) (4):kNN.cla ...
- CI框架中集成CKEditor编辑器的教程
CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...
- Intellij Idea启用Git可视化界面
第一步. 第二步. 然后点击OK 验证
- .NetCore 实现分页控件(URL分页)实战
上一篇文章介绍了分页控件的具体实现方式,接下来我们就来做一个分页控件 后台数据处理就过度的介绍,下面针对URL分页中的下面几点做说明: 1.搜索条件的状态保持 2.点击分页需要带上搜索条件 3.页码的 ...
- 【PAT】1053 Path of Equal Weight(30 分)
1053 Path of Equal Weight(30 分) Given a non-empty tree with root R, and with weight Wi assigned t ...
- React 与 Redux 在生产环境中的实践总结
React 与 Redux 在生产环境中的实践总结 前段时间使用 React 与 Redux 重构了我们360netlab 的 开放数据平台.现将其中一些技术实践经验总结如下: Universal 渲 ...
- Codeforces 466E Information Graph
Information Graph 把询问离线之后就能随便搞了, 去check一下是不是祖先, 可以用倍增也能用dfs序. #include<bits/stdc++.h> #define ...