博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#迭代器、装箱/拆箱、重载等
阅读量:5278 次
发布时间:2019-06-14

本文共 2192 字,大约阅读时间需要 7 分钟。

迭代器

迭代器是什么?

迭代器是作为一个容器,将要遍历的数据放入,通过统一的接口返回相同类型的值。

为什么要用迭代器?

为何了为集合提供统一的遍历方式,迭代器模式使得你能够获取到序列中的所有元素而不用关心是其类型,如果没有迭代器,某些数据结构遍历较为困难,如Map无法迭代

如果一个类实现了IEnumerable接口,那么就能够被迭代,才能使用foreach

迭代器概述

  • 迭代器是可以返回相同类型的值的有序序列的一段代码。
  • 迭代器可用作方法、运算符或 get 访问器的代码体。
  • 迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。
  • 可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){}
  • 迭代器的返回类型必须为 IEnumerable、、IEnumerable<T> 或 <T>。

 关键字用于指定返回的值。到达 yield return 语句时,会保存当前位置。下次调用迭代器时将从此位置重新开始执行

如何使用迭代器

 

public System.Collections.IEnumerator GetEnumerator(){    for (int i = 0; i < max; i++)    {        yield return i;    }}

 

  

//为整数列表创建迭代器 public class SampleCollection{        public int[] items = new int[5] { 5, 4, 7, 9, 3 };        public System.Collections.IEnumerable BuildCollection() {            for (int i = 0; i < items.Length; i++) {                yield return items[i];            }        }    }class Program {        static void Main(string[] args) {            SampleCollection col = new SampleCollection();    foreach (int i in col.BuildCollection())//输出集合数据            {                System.Console.Write(i + " ");            }            for (;;) ;        }    }

 

 

类型比较

封箱和拆箱子:封箱是把值类型转换为System.Object,或者转换为由值类型的接口类型。拆箱相反。

装箱和拆箱是为了将值转换为对象

struct MyStruct    {        public int Val;    }    class Program    {        static void Main(string[] args) {    MyStruct valType1 = new MyStruct();        valType1.Val = 1;        object refType = valType1;    //封箱操作,可以供传递用        MyStruct valType2 = (MyStruct)refType;    //访问值类型必须拆箱        Console.WriteLine(valType2.Val);//输出1            for (;;) ;        }

Is运算符语法:

<operand>is<type>同类型返回true,不同类型返回false

As运算符语法:

<operand>is<type>把一种类型转换为指定的引用类型

 

运算符重载

public class Add2 {        public int val {            get; set;        }        public static Add2 operator ++(Add2 op1) {            op1.val = 100;//设置属性             op1.val = op1.val + 2;             return op1;        }    }class Program {        static void Main(string[] args) {        Add2 add = new Add2();        add++;        Console.WriteLine(add.val);//输出102            for (;;) ;        }    }

 

转载于:https://www.cnblogs.com/feichangnice/p/5251731.html

你可能感兴趣的文章
转载:一位软件工程师的6年总结
查看>>
树状数组的特殊形式
查看>>
BZOJ 1053 & 反素数
查看>>
mysql5.5.28.tar.gz编译安装操作笔记
查看>>
神经网络图灵机(Neural Turing Machines, NTM)
查看>>
Spring AOP 关键词的理解
查看>>
java合成图片
查看>>
Java Web开发Tomcat中三种部署项目的方法
查看>>
【Linux】Linux 自己主动挂载NTFS格式移动硬盘
查看>>
LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192
查看>>
Ubuntu14.04下安装ZendStudio10.6.1+SVN出现Failed to load JavaHL Library
查看>>
Wind River Linux 6 Security Profile
查看>>
Android_显示器本身被卸载应用程序
查看>>
怎样以学习单片机为契机,逐步成为优秀的project师
查看>>
Java中Integer类的方法
查看>>
“error : unknown filesystem”的解决的方法
查看>>
linux杂谈(十九):DNSserver的配置(二)
查看>>
《网络攻防》第二周作业
查看>>
关于Windows Live Writer博客同步
查看>>
linux下的C语言快速学习—计算机体系结构基础简单了解
查看>>