用C#自定义一个简单的集合

作为一个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来遍历。我们不能因为它不能因为这个集合的等功能不完整就说它不是集合吧。就好比一个人不能走路,不能说话,那他任然是一个人,总不能说他不是人吧。

  所以我个人对集合的理解:

      1.迭代与集合的关系:一个类只要实现了迭代功能,就可以说它是一个集合;

      2.集合与foreach的关系:如果一个类型(也可以说一个集合)能用foreach遍历,那么该类型一定实现了Imnumerable接口,反之;

  真正理解了的话,你会发现上面的两点其实是一句话,至于什么是Imnumerable接口,也就是所谓的迭代器,之后有机会我也会相关的做出总结文档,最后我们在上面的MyList多加一条数据list.Add("ddaad");你会发现并不会报错,那是因为我在遍历时给item用的var类型,那如果我把var改成int类型,程序就会报错了,所以我们的这个集合和C#里的ArrayList一样,在类型安全上有很大的问题,那怎么解决这个问题呢,答案就是泛型,下次总结文档我就把上面的代码改成用泛型实现,来对比一下普通集合与泛型集合的区别

时间: 2024-11-05 11:49:26

用C#自定义一个简单的集合的相关文章

Struct—自定义一个简单的mystruct

传统mvc开发总结: 1. 跳转代码写死,不灵活 2. 每次都去写servlet,web.xml中配置servlet! (配置目的: 请求, Servlet处理类) 一个简单的struct案例,描述如下 登陆.注册 登陆成功     首页 登入失败     登入页 注册成功      登陆页 整理如下 项目列表如下 代码实现 前台页面登入页: <form action="${pageContext.request.contextPath }/login.action" name=

自定义一个简单的django页面

博文地址:    http://www.thedream.pub/yong-djangozi-ding-yi-ge-wang-ye/

自定义一个简单的web框架

from wsgiref.simple_server import make_server def book(request):     #视图函数 return [b'<h1> book !!! </h1>']def web(request): return [b'<h1> web !!! </h1>'] def routers(): urlpatterns = ( ('/book',book),      #url 映射    ('/web',web),

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

本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文件控件tag值操作 数据模型部分: YYtg.h文件 // // YYtg.h // 01-团购数据显示(没有配套的类) // // Created by apple on 14-5-29. // Copyright (c) 2014年 itcase. All rights reserved. //

Custom UIView 通过xib实现一个简单地自定义视图

1 /** 2 * 使用Custom UIView的这条路,我走的很不顺利,前期犯2,中期有事,浪费了很多时间! 3 * 现在空闲的时间不多了,只能抓紧时间写两个小demo,一来做练习,二来整理下也许能给要学习的人一些帮助! 4 */ 1 /** 2 * Custom UIView常用的三种实现方法: 3 * Method_1:通过初始化的方式(eg:UITableViewCell的重写) 4 Method_2:通过drawRect的方法,使用代码自己画出想要的视图 5 Method_3:通过x

一个简单的jsp自定义标签

学到了一个简单的jsp自定义标签,后面有更多的例子,会更新出来: 例子1: 步骤: 1.编写标签实现类: 继承javax.servlet.jsp.tagext.SimpleTagSupport; 重写doTag,实现在网页上输出: 2.在web-inf目录或其子目录下,建立helloword.tld文件,即自定义标签的说明文件 注意:标签处理类必须放在包中,不能是裸体类:不需要修改web.xml: //tld: tag lib description 标签库描述 java代码: package

自定义一个可以被序列化的泛型Dictionary&lt;TKey,TValue&gt;集合

Dictionary是一个键值类型的集合.它有点像数组,但Dictionary的键可以是任何类型,内部使用Hash Table存储键和值.本篇自定义一个类型安全的泛型Dictionary<TKey, TValue>,并且可以被序列化. 为了使自定义的泛型Dictionary<TKey, TValue>可以被序列化成xml,需要实现泛型IXmlSerializable接口. public class MySerializableDictionary<TKey, TValue&g

iOS开发UI基础—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

ios开发UI基础-使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的图片) 3.提供2个模型 数据模型: