C#迭代重载等
迭代器
迭代器是什么?
迭代器是作为一个容器,将要遍历的数据放入,通过统一的接口返回相同类型的值。
为什么要用迭代器?
为何了为集合提供统一的遍历方式,迭代器模式使得你能够获取到序列中的所有元素而不用关心是其类型,如果没有迭代器,某些数据结构遍历较为困难,如Map无法迭代
如果一个类实现了IEnumerable接口,那么就能够被迭代,才能使用foreach
迭代器概述
- 迭代器是可以返回相同类型的值的有序序列的一段代码。
- 迭代器可用作方法、运算符或 get 访问器的代码体。
- 迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。
- 可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){}
- 迭代器的返回类型必须为 IEnumerable、IEnumerator、IEnumerable<T> 或 IEnumerator<T>。
yield 关键字用于指定返回的值。到达 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[] { , , , , };
public System.Collections.IEnumerable BuildCollection() {
for (int i = ; 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 = ;
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 = ;//设置属性
op1.val = op1.val + ;
return op1;
}
}
class Program {
static void Main(string[] args) {
Add2 add = new Add2();
add++;
Console.WriteLine(add.val);//输出102
for (;;) ;
}
}
C#迭代重载等的更多相关文章
- Python之回调魔法
Python中魔法(前后又下划线)会在对象的生命周期被回调. 借助这种回调, 可以实现AOP或者拦截器的思想. 在Python语言中提供了类似于C++的运算符重在功能:一下为Python运算符重在调用 ...
- DNS配置范例
这里使用CentOS 7作为DNS主服务器.(ip:172.18.7.77) 正向解析配置: ]# vim /etc/named.rfc1912.zones zone "opsnote.co ...
- C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)
前言 这两天在网上看到的总结很多,尤其是博客园中的,很多很多,也给了我很多的启发,当然自己也总结过,而且有很多人也给与我一些意见和看法.不管怎样,自己还是先把所谓的基础知识加强巩固下吧. 2014年的 ...
- python 基础——运算符重载
方法 重载 调用 __init__ 构造函数 x = Class() __del__ 析构函数 del x __str__ 打印 print x __call__ 调用函数 x(*args) __ge ...
- Python中类的运算符重载
这篇文章仅仅是总结性质的,待以后有时间的时候会针对比较难理解的部分补充一些例子. 构造和析构 __init__ __del__ 函数调用 __call__ 打印操作 __str__ __repr__ ...
- 《Head First 设计模式》学习笔记——迭代模式 + 组合模式
迭代模式设置共生死亡,一般来说.我们只是想实现一个集,我们需要的同时提供这个集合的迭代器,喜欢java中间Collection.List.Set.Map等,这些集合都有自己的迭代器.假如我们要实现一个 ...
- Parallel.For 你可能忽视的一个非常实用的重载方法
说起Parallel.For大家都不会陌生,很简单,不就是一个提供并行功能的for循环吗? 或许大家平时使用到的差不多就是其中最简单的那个重载方法,而真实情况 下Parallel.For里面有14个重 ...
- C#的发展历程第五 - C# 7开始进入快速迭代道路
C# 7开始,C#加快了迭代速度,多方面的打磨让C#在易用性,效率等各方面都向完美靠近.另外得益于开源,社区对C#的进步也做了很大共享.下面带领大家看看C# 7的新特性.其中一部分是博主已经使用过,没 ...
- python运算符重载(二)
一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...
随机推荐
- Vis.js – 基于浏览器的动态 JavaScript 可视化库
Vis.js 是一个动态的,基于浏览器的可视化库.该库被设计为易于使用,能处理大量的动态数据.该库由以下几部分组成:一是数据集和数据视图,基于灵活的键/值数据集,可以添加,更新和删除项目,订阅数据集变 ...
- MySQL的常规操作
MySQL的常规知识 show 查看数据库 show databases; 查看表 存在的所有表 show tables; 创建表的命令 show create table table_name; 表 ...
- mongodb系列3 mongo mongoskin 连接以及连接数的问题进阶
1)使用mongodb连接mongo var mongo = require('mongodb'), //引入mongodb dbHost = '127.0.0.1', dbPort = 27017; ...
- jQuery原型方法.pushStack源码分析
这次分析的方法跟前面不同,虽然pushStack也是原型方法之一,但是我们几乎从不用在页面调用,在参考手册里面也没有这个方法的使用说明,但是这个方法还是非常重要的,在使用很多jQuery的其他方式都会 ...
- UITableViewDataSource协议
前言: 在iOS开发中,表视图UITableView 是我们做UI界面设计时的重要视图. 那么,使用表视图UITableView 需要遵守哪些协议呢? <UITableViewDataSourc ...
- [SharePoint] SharePoint 错误集 1
1. Delete a site collection · Run command : Remove-SPSite –Identity http://ent132.sharepoint.hp.com/ ...
- ReCap 360 photo照片建模技术的又一个例子
这是我做的又一个利用Autodesk ReCap 360 照片建模技术做的一个例子.你可以下载模型自己把玩,或者下载原始照片自己试一试. 拍摄工具: 小米手机 照片数量:约120张 后期处理工具: p ...
- swift 2.2 语法 (上)
前言: 1.此文中的语法会根据Swift的升级变动而更新. 2.如果需要请移步 -> swift2.2 语法(中).swift 2.2语法(下) Swift与OC中常见的区别 导入框架 OC: ...
- iOS 页面跳转传值,属性传值,代理传值,代码块传值,单例传值,通知传值
有时候我们在页面跳转的时候回传递相应的参数,如,你想把在第一个页面的文本框里的内容显示在第二个文本框中,或者你又想把第二个文本框中的内容改变之后到第一个页面的文本框中,所有,这个时候我们就要用到页面跳 ...
- js confirm函数 删除提示
<a href="del.php" onclick="return confirm('是否将此留言信息删除?')">删除留言</a>