用C#自定义一个简单的集合
闲来无聊来自己做了一个简单的'集合',用来加深自己对集合的理解
class listNode
{
private object value;
public listNode(object _value)
{
this.value = _value;
}
public object Value
{
get { return value; }
}
public listNode Next { get; set; }
public listNode Prev { get; set; }
}
//定义一个MyList集合
class MyList :IEnumerable
{
//用first和last标记链表的头和尾
private listNode first;
public listNode First
{
get { return first; }
}
private listNode last;
public listNode Last
{
get { return last; }
}
//为集合添加元素的方法
public listNode Add(object node)
{
listNode newNode = new listNode(node);
if (first == null)
{
first = newNode;
last = first;
}
else
{
last.Next = newNode;
last = last.Next;
}
return newNode;
}
//实现迭代功能
public IEnumerator GetEnumerator()
{
listNode current = first;
while (current != null)
{
yield return current.Value;
current = current.Next;
}
}
}
终于代码,写好了,来实例化看一下效果
class Program
{
static void Main(string[] args)
{
MyList list = new MyList();
list.Add(1);
list.Add(5);
list.Add(6);
list.Add(10);
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
查看运行效果,大功告成
这不就是一个简单的集合吗?事实是这样的吗,其实这个MyList算不上是一个集合,只能算是一个链表,因为它与一个“合格”的集合比,还差的太多。上面代码只简单实现了一个简单的Add方法,一个完整的集合是应该可以有增删改查等许多复杂功能的啊。但是你也可以就把它当做一个集合(一个不完整的集合),甚至可以说,不光上面写的MyList是一个集合,如果只要一个类只要实现类了迭代器的功能(上面的Imnumerable接口),那么这个类就是一个集合,因此它也就可以用foreach来遍历。我们不能因为它不能因为这个集合的等功能不完整就说它不是集合吧。就好比一个人不能走路,不能说话,那他任然是一个人,总不能说他不是人吧。
C#集合:
1.迭代与集合的关系:一个类只要实现了迭代功能,就可以说它是一个集合;
2.集合与foreach的关系:如果一个类型(也可以说一个集合)能用foreach遍历,那么该类型一定实现了Imnumerable接口,反之;
真正理解了的话,你会发现上面的两点其实是一句话,至于什么是Imnumerable接口,也就是所谓的迭代器,之后有机会我也会相关的做出总结文档,最后我们在上面的MyList多加一条数据list.Add("ddaad");你会发现并不会报错,那是因为我在遍历时给item用的var类型,那如果我把var改成int类型,程序就会报错了,所以我们的这个集合和C#里的ArrayList一样,在类型安全上有很大的问题,那怎么解决这个问题呢,答案就是用泛型
用C#自定义一个简单的集合的更多相关文章
- 自定义一个简单的JDBC连接池
一.什么是JDBC连接池? 在传统的JDBC连接中,每次获得一个Connection连接都需要加载通过一些繁杂的代码去获取,例如以下代码: public static Connection getCo ...
- 自定义一个简单的SegmentedControl
先大概看下我们想实现简单的效果 源码 // // DSegmentedControl.swift // IOS学习之自定义UISegmentedControl // // Created by din ...
- Struts—自定义一个简单的mystruct
传统mvc开发总结: 1. 跳转代码写死,不灵活 2. 每次都去写servlet,web.xml中配置servlet! (配置目的: 请求, Servlet处理类) 一个简单的struct案例,描述如 ...
- 代码调试--自定义一个简单的debug函数
function debug(){ $num_args = func_num_args(); //实参个数 $arg_list = func_get_args(); //返回某一个实参,必须是实参数组 ...
- 自定义一个简单的web框架
from wsgiref.simple_server import make_server def book(request): #视图函数 return [b'<h1> book ...
- [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar
在做安卓UI的时候有时候需自定义具有动画效果的按钮或需要自定义一下actionbar~ 本节用一个简单的demo讲如何自定义具有动画效果的按钮,以及个性化的actionbar 下面是效果: 其中: △ ...
- 自定义View(三)--实现一个简单地流式布局
Android中的流式布局也就是常说的瀑布流很是常见,不仅在很多项目中都能见到,而且面试中也有很多面试官问道,那么什么是流式布局呢?简单来说就是如果当前行的剩余宽度不足以摆放下一个控件的时候,则自动将 ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...
随机推荐
- 关于Item
0.Item The base class of all items, which implements default behavior. 项(Item)代表一个字节码中可以寻址的实体,有许多种类的 ...
- 图解安卓-c++开发-通过java 调用c++ jni的使用
接着上一节 ,很多事情用java做,效率要差一点(尤其是游戏),所以要用c++来实现,那么java如何调用c++ 首先建议一个工程 HelloJni如下图: 按照默认的配置下一步,直到完成 . 如下图 ...
- Java 裁剪图片
package com.test; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.Ima ...
- 在C#中使用依赖注入
依赖注入(Dependency Injection,缩写为DI)是一种实现(Inversion of Control,缩写为IoC)的方法.在编写C#代码时,使用这种方法能够解决一些场景的需求.本系列 ...
- hadoop学习笔记(三):hadoop文件结构
hadoop完整安装目录结构: 比较重要的包有以下4个: src hadoop源码包.最核心的代码所在目录为core.hdfs和mapred,他们分别实现了hadoop最重要的3个模块:基础公共库.H ...
- 10.Set 和 Map 数据结构
Set 和 Map 数据结构 Set 和 Map 数据结构 Set 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来 ...
- Linux进程管理四大工具ps \dstat\ top\ htop
Linux进程管理之“四大名捕” 一.四大名捕 四大名捕,最初出现于温瑞安创作的武侠小说,是朝廷中正义力量诸葛小花的四大徒弟,四人各怀绝技,分别是轻功暗器高手“无情”.内功卓越的高手“铁手”.腿功惊人 ...
- ABP学习入门系列(一)(第一个ABP项目)
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称.ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它 ...
- JavaScript学习笔记系列1:JavaScript的是什么?
一.JS是什么? JavaScript作为Netscape Navigator浏览器的一部分首次出现在1996年.它最初的设计目标是改善网页的用户体验. 作者:Brendan Eich 期初JavaS ...
- TCP三次握手是什么?为什么要进行三次握手?两次,四次握手可以吗?
1.第一次握手,发送SYN报文,传达信息:“你好,我想建立连接”: 第二次握手,回传SYN+ACK报文,传达信息:“好的,可以建立链接”: 第三次握手,回传ACK报文,传到信息:“好的,我知道了 ...