C#进修日志29----二维索引器 与 foreach遍历索引器【C#.Net教程】,C#,二维索引器,foreach遍历
作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:15评论:0
题目1:
数组有多维度的,索引器也可所以多维的吗???
索引器可所以多维的,上一篇中我们定义的索引器只是一维索引器,同数组一样可以定义多维索引器。比方我们索引电影院的一个放映室的坐位号,第一排第一列为1号,一排2列为2号……以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义cinema类包括一个二维数组与一个二维接见器 class cinema {//定义一个二维数组 private string[,] seat = new string[5, 5]; //定义一个二维接见器 public string this[uint a, uint b] { get { return seat[a, b]; } set { seat[a, b] = value; } } } class Program { static void Main(string[] args) { cinema movieroom = new cinema();//实例化 //for轮回遍历写入 for (uint i = 1; i < 5; i++) { for (uint j = 1; j < 5; j++) { movieroom[i, j] = "第" + i + "排 第" + j + "列"; } } //for轮回遍历读出 for (uint i = 1; i < 5; i++) { for (uint j = 1; j < 5; j++) { Console.WriteLine(movieroom[i,j]+"\t"+((i-1)*4+j)+"号"); } } } } }
效果:
二维的索引器就是云云了,其他多维数的都以此类推,就不引见了。
题目2:
数组可以运用foreach语句举行简朴快速的遍历,索引器也能运用foreach语句遍历么???
这个也是可以的,在处理这个题目的时刻有必要弄清楚foreach的实行步骤与道理.
foreach语句:
C#中编译器会把foreach语句转化为IEnumerable接口的要领和属性,比方:
string[] str = new string[] { "HC1", "HC2", "HC3", "HC4" };//定义一个数组 foreach (string i in str)//运用foreach遍历 { Console.WriteLine(i); }
然则foreach语句会被剖析为下面的代码段。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; //注重增加这个定名空间,不然没有IEnumerator这个类 namespace Example { class Program { static void Main(string[] args) { string[] str = new string[] {"HC1","HC2","HC3","HC4" }; //定义一个数组 //挪用GetEnumerator()要领,取得数组的一个罗列 IEnumerator per = str.GetEnumerator(); //在while轮回中,只需MoveNext()返回true,就一向轮回下去 while (per.MoveNext()) { //用Current属性接见数组中的元素 string p = (string)per.Current; Console.WriteLine(p); } } } }
效果都一样:
我们对string检察定义发明,string继续于IEnumerable接口,IEnumerable接口中只要一个要领GetEnumerator();(该要领已在string类中被完成了)该要领的作用是,返回一个轮回接见鸠合的罗列器IEnumerator,我们在转IEnumerator的定义,它也是一个接口,内里只要三个要领的声明,Current(猎取鸠合中的当前元素),MoveNext(将罗列数推进到鸠合的下一个元素,胜利返回true,超出末端返回false),Reset( 将罗列数设置为其初始位置,该位置位于鸠合中第一个元素之前),也就是说,如果在我们自定义的类中没有完成GetEnumerator要领,以及Current、MoveNext要领,就不能运用foreach语句遍历了。
foreach语句遍历自定义类:
照样上面电影院的例子,不过此次我们不必for轮回输出,而是完成foreach语句遍历输出,以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; //增加这个很有必要 namespace Test1 {//定义cinema继续IEnumerable接口完成GetEnumerator()功用 class cinema:IEnumerable {//定义一个二维数组 private string[,] seat = new string[5, 5]; //定义坐位号码 static public int index=-1; //定义一个二维索引器 public string this[uint a, uint b] { get { return seat[a, b]; } set { seat[a, b] = value; }//set接见器自带value参数 } //完成GetEnumerator要领 public IEnumerator GetEnumerator() { return new ienumerator(seat); //应用组织要领传入seat参数 } //因为上面返回值的须要所以继续接口IEnumerator并完成要领 private class ienumerator:IEnumerator { private string[,] seats; //将传入的seat数组赋给它 public ienumerator(string[,] s) { seats = s; } //定义Current的只读属性 public object Current { //依据坐位号推算数组的坐标也就是物理位置 get { return seats[1+(index/4), (index%4)+1]; } } //定义向下挪动的划定规矩 public bool MoveNext() { index++; //索引下一个坐位号的位置 if (index <= 15) { return true; } else return false; } //因为这个顺序顶用不到这个要领所以不完成,然则必须得写上不然会报错 public void Reset() { } } } class Program { static void Main(string[] args) { cinema movieroom = new cinema();//实例化 //for轮回索引写入 for (uint i = 1; i < 5; i++) { for (uint j = 1; j < 5; j++) { movieroom[i, j] = "第" + i + "排 第" + j + "列"; } } //挪用foreach语句遍历输出 foreach (string i in movieroom) { Console.WriteLine(i+"\t"+(cinema.index+1)+"号"); } } } }
效果:
效果是一样的。。。。
以上就是 C#进修日志29----二维索引器 与 foreach遍历索引器的内容,更多相关内容请关注ki4网(www.ki4.cn)!
相关推荐
- C#对XML读写的代码实例【XML教程】,C#,XML读写
- C#中经由过程xpath查找xml的指定元素的代码实例【XML教程】,C#,xpath,xml
- C#怎样盘算2个字符串类似度的示例代码分享【C#.Net教程】,C#,字符串,相似度
- 详解C#罕见运用函数的实例总结【C#.Net教程】,C#,应用函数
- C#剖析XML文件的代码实例分享【C#.Net教程】,C#,XML
- C# 怎样设置体系的默许打印机的简朴代码示例【C#.Net教程】,C#,打印机
- 详解C#程序员开辟WinForm必需晓得的Window音讯大全的示例代码【C#.Net教程】,C#,WinForm,Window
- C# HttpHandler 异步监听要求的代码详解【C#.Net教程】,C# ,HttpHandler ,异步监听
- C# Json 序列化与反序列化二【C#.Net教程】,C#,序列化,反序列化
- C# DataSet机能最好实践【C#.Net教程】,C#,DataSet
你 发表评论:
欢迎- .Net教程排行
-
- 1案例分享c++ map的运用和 查找机能测试【C#.Net教程】,性能,map,c++
- 2细致引见C# string花样的日期时候字符串转为DateTime范例的要领【C#.Net教程】,C#,string,DateTime
- 3c#怎样运用?c#的基础语法【C#.Net教程】,c#,关键字
- 4详解ASP.NET中衔接数据库设置要领【C#.Net教程】,ASP.NET,数据库,配置
- 5C# DataSet机能最好实践【C#.Net教程】,C#,DataSet
- 6.net和c#有什么区别【C#.Net教程】,.net,c#
- 7C#_挪用封装的一个类完成导出Excel表格的功用【C#.Net教程】,C# Excel表格
- 8asp .net 面试题及答案分享【C#.Net教程】,.net,自己,整理,问题,面试
- 9让WebAPI 返回JSON花样的数据实例教程【C#.Net教程】,javascript,WebAPI,JSON,api,web,搭建,返回
- 最新文章
- 广而告之