闲来无聊来自己做了一个简单的'集合',用来加深自己对集合的理解

  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#自定义一个简单的集合的更多相关文章

  1. 自定义一个简单的JDBC连接池

    一.什么是JDBC连接池? 在传统的JDBC连接中,每次获得一个Connection连接都需要加载通过一些繁杂的代码去获取,例如以下代码: public static Connection getCo ...

  2. 自定义一个简单的SegmentedControl

    先大概看下我们想实现简单的效果 源码 // // DSegmentedControl.swift // IOS学习之自定义UISegmentedControl // // Created by din ...

  3. Struts—自定义一个简单的mystruct

    传统mvc开发总结: 1. 跳转代码写死,不灵活 2. 每次都去写servlet,web.xml中配置servlet! (配置目的: 请求, Servlet处理类) 一个简单的struct案例,描述如 ...

  4. 代码调试--自定义一个简单的debug函数

    function debug(){ $num_args = func_num_args(); //实参个数 $arg_list = func_get_args(); //返回某一个实参,必须是实参数组 ...

  5. 自定义一个简单的web框架

    from wsgiref.simple_server import make_server def book(request):     #视图函数 return [b'<h1> book ...

  6. [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar

    在做安卓UI的时候有时候需自定义具有动画效果的按钮或需要自定义一下actionbar~ 本节用一个简单的demo讲如何自定义具有动画效果的按钮,以及个性化的actionbar 下面是效果: 其中: △ ...

  7. 自定义View(三)--实现一个简单地流式布局

    Android中的流式布局也就是常说的瀑布流很是常见,不仅在很多项目中都能见到,而且面试中也有很多面试官问道,那么什么是流式布局呢?简单来说就是如果当前行的剩余宽度不足以摆放下一个控件的时候,则自动将 ...

  8. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  9. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

随机推荐

  1. HTML引入CSS样式的四种方法

    在HTML中引入CSS的方法主要有四种,它们分别是行内式.内嵌式.链接式和导入式. 1.行内式          行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐 ...

  2. CSS选择器详解(一)常用选择器

    目录 类型选择器 类选择器 ID选择器 伪类 伪元素 类型选择器 通过类型选择器可以选择某一类型的html标签,并对其使用样式. 语法: selector {property1: value; pro ...

  3. Nginx使用记录

    配置常见解释: ########### 每个指令必须有分号结束.################# #user administrator administrators; #配置用户或者组,默认为no ...

  4. no awt in java.libary.path

    缺少依赖包. linux下进入jdk安装路径/jre/lib/i386 使用ldd查看依赖包情况: ldd libawt.so 如果发现有not found的,就安装上,或者从jdk下查找,使用软连接 ...

  5. Linux进程管理 简介

    何为进程,我想这个问题大家再熟悉不过了吧,无非就是"执行中的程序"! 概念性的东西本文暂时忽略或者略微一提,详细信息还需要阅读相应的blog或专业书籍.(博主收藏了计算机相关的大量 ...

  6. Content Negotiation using Spring MVC

    There are two ways to generate output using Spring MVC: You can use the RESTful @ResponseBody approa ...

  7. 11.Proxy

    Proxy Proxy 概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程语言进行编程. ...

  8. C# 获取config文件的值

    自定义配置文件帮助类 利用ExeConfigurationFileMap类将自定义配置文件转换为Configuration类进行数据读取 代码很简单,就不做扼要说明 /// <summary&g ...

  9. [转]How to log queries using Entity Framework 7?

    本文转自:https://stackoverflow.com/questions/26747837/how-to-log-queries-using-entity-framework-7

  10. [转]SQL Server 2008- Get table constraints

    本文转自:https://stackoverflow.com/questions/14229277/sql-server-2008-get-table-constraints You should u ...