C# 自定义集合
自定义类型
- public class Product
- {
- public int Id { get; set; } // 自增ID
- public string Name { get; set; } // 名称
- public string Code { get; set; } // 主键
- public string Category { get; set; } // 类型
- public decimal Price { get; set; } // 价格
- public DateTime ProduceDate { get; set; } //产品时间
- /// <summary>
- /// 重写ToString 方法
- /// </summary>
- /// <returns></returns>
- public override string ToString()
- {
- return String.Format("{0}{1}{2}{3}{4}{5}",
- this.Id.ToString().PadLeft(2), this.Category.PadLeft(15),
- this.Code.PadLeft(7), this.Name.PadLeft(17), this.Price.ToString().PadLeft(8),
- this.ProduceDate.ToString("yyyy-M-d").PadLeft(13));
- }
- public static ProductCollection GetSampleCollection()
- {
- ProductCollection collection = new ProductCollection(
- new Product { Id = 1, Code = "1001", Category = "Red Wine", Name = "Torres Coronas", Price = 285.5m, ProduceDate = DateTime.Parse("1997-12-8") },
- new Product { Id = 3, Code = "2001", Category = "White Spirit", Name = "Mao Tai", Price = 1680m, ProduceDate = DateTime.Parse("2001-5-8") },
- new Product { Id = 4, Code = "2013", Category = "White Spirit", Name = "Wu Liang Ye", Price = 1260m, ProduceDate = DateTime.Parse("2005-8-1") },
- new Product { Id = 8, Code = "3001", Category = "Beer", Name = "TSINGTAO", Price = 6.5m, ProduceDate = DateTime.Parse("2012-4-21") },
- new Product { Id = 11, Code = "1003", Category = "Red Wine", Name = "Borie Noaillan", Price = 468m, ProduceDate = DateTime.Parse("1995-7-6") },
- new Product { Id = 15, Code = "1007", Category = "Red Wine", Name = "Pinot Noir Rose", Price = 710m, ProduceDate = DateTime.Parse("1988-9-10") },
- new Product { Id = 17, Code = "3009", Category = "Beer", Name = "Kingway", Price = 5.5m, ProduceDate = DateTime.Parse("2012-6-13") }
- );
- return collection;
- }
- }
自定义的集合方法
- public class ProductCollection
- {
- public Hashtable table;
- public ProductCollection()
- {
- table = new Hashtable();
- }
- public ProductCollection(params Product[] array)
- {//初始化
- table = new Hashtable();
- foreach (Product item in array)
- {
- this.Add(item);
- }
- }
- public ICollection Keys { get { return table.Keys; } }
- /// <summary>
- /// 根据索引获取当前Key值
- /// </summary>
- /// <param name="index">索引</param>
- /// <returns></returns>
- public string GetKeys(int index)
- {
- if (index < 0 || index > table.Keys.Count)
- throw new Exception("超出索引范围");
- string selectN = "";
- int i = 0;
- foreach (string item in table.Keys)
- {
- if (index == i)
- {
- selectN = item; break;
- }
- i++;
- }
- return selectN;
- }
- public Product this[int index]
- {
- get
- {
- string key = GetKeys(index);
- return table[key] as Product;
- }
- set { string key = GetKeys(index); table[key] = value; }
- }
- /// <summary>
- /// 根据Key值获得对应内容
- /// </summary>
- /// <param name="Name"></param>
- /// <returns></returns>
- public string GetKeys(string Name)
- {
- foreach (string item in table.Keys)
- {
- if (item==Name)
- {
- return item;
- }
- }
- throw new Exception("不存在此键值");
- }
- public Product this[string Name]
- {
- get
- {
- string selects = GetKeys(Name);
- return table[selects] as Product;
- }
- set
- {
- string key = GetKeys(Name);
- table.Remove(table[key]);
- this.Add(value);
- }
- }
- /// <summary>
- /// 添加功能
- /// </summary>
- /// <param name="item">添加类</param>
- public void Add(Product item)
- {
- foreach (string key in table.Keys)
- {
- if(key==item.Code)
- throw new Exception("产品代码不能重复");
- }
- table.Add(item.Code,item);
- }
- /// <summary>
- /// 移除功能
- /// </summary>
- /// <param name="item">添加类</param>
- public bool Remove(Product item)
- {
- try
- {
- table.Remove(item.Code);
- return true;
- }
- catch
- {
- return false;
- }
- }
- /// <summary>
- /// 移除指定索引项
- /// </summary>
- /// <param name="index"></param>
- /// <returns></returns>
- public bool Remove(int index)
- {
- if (index < 0 || index > table.Count)
- throw new Exception("超出索引范围");
- string key = GetKeys(index);
- table.Remove(key);
- return true;
- }
- /// <summary>
- /// 清除所有内容
- /// </summary>
- public void clear()
- {
- table = new Hashtable();
- }
- /// <summary>
- /// 获取总数
- /// </summary>
- public int Count { get { return table.Keys.Count; } }
- }
C# 自定义集合的更多相关文章
- 《C#本质论》读书笔记(16)构建自定义集合
16.1 更多集合接口 集合类(这里指IEnumerable层次结构)实现的接口层次结构 16.1.1 IList<T>与IDictionary<TKey,TValue> 字典 ...
- 使用yield关键字让自定义集合实现foreach遍历
一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口) 但是我们也可以通过使用yield关键字构建的迭代 ...
- UICollectionView(集合视图)以及自定义集合视图
一.UICollectionView集合视图 其继承自UIScrollView. UICollectionView类是iOS6新引进的API,用于展示集合视图,布局 ...
- [c#基础]集合foreach的必要条件和自定义集合
引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...
- 集合、拆箱、装箱、自定义集合的foreach
集合部分 参考:http://msdn.microsoft.com/zh-cn/library/0ytkdh4s(v=vs.110).aspx 集合类型是诸如哈希表.队列.堆栈.包.字典和列表等数据集 ...
- 十六、C# 常用集合类及构建自定义集合(使用迭代器)
常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollectio ...
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...
- C# 通过IEnumberable接口和IEnumerator接口实现泛型和非泛型自定义集合类型foreach功能
IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环,如 ...
- 【VBA编程】10.自定义集合
自定义集合类型,类似于变量声明,只是要将Dim关键字和New collection关键字搭配起来使用,其语法描述如下:其中集合名的命名方式同于标准变量的命名 Dim 集合名 As New collec ...
- 实现自定义集合的可枚举类型(IEnumerable)和枚举数(IEnumerator )
下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口: using System; using System.Collections; using Syst ...
随机推荐
- Windows操作 - Photoshop为图片添加透明立体水印
原文地址:http://design.yesky.com/photoshop/252/2427752.shtml 本文我们介绍用Photoshop为图片添加透明立体水印的方法和技巧. 原图: 打开原图 ...
- CCF真题Z型输出
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> ...
- mysql创建远程用户
grant all privileges on *.* to myuser@"%" identified by 'password'; 用root用户登陆,然后: grant al ...
- Gradle用户指南(章8:依赖关系管理基础)
章8:依赖关系管理基础 本章将介绍一些gradle依赖关系管理的基础 什么是依赖关系管理? 简略的说,依赖管理是由两部分组成的.首先,gradle需要知道你要构建或者运行的项目,以便找到它们.我们将这 ...
- 慕课网-安卓工程师初养成-4-11 Java循环跳转语句之 break
来源:http://www.imooc.com/code/1431 生活中,我们经常会因为某些原因中断既定的任务安排.如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛.在 ...
- 【程序与资源】linux程序与资源管理
程序与资源管理:ps.top.free.sar.kill.uname ①ps语法: [root @test /root ]# ps -aux 参数说明: a :选择所有的程序列出 u :所有使 ...
- Linux操作系统下三种配置环境变量的方法——转载
来源:赛迪网 作者:millio 现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法. 1.修改/e ...
- 非常不错的IT进阶站点
1:CSDN http://www.csdn.net/ 2:Iteye http://www.iteye.com 3:拼吾爱 http://pin5i.com 4:月光博客 http://www.wi ...
- [JFinal 1] JFinal和SSH中使用拦截器的对比
导读:先前在做.NET项目时,拦截的功能主要是依靠缓存session来实现.当需要跳转到某个页面,使用某个功能查询一些数据时,会根据session中的用户值来判断是否已经正常登录,如果没有,则重定向到 ...
- linux设置ulimit值永久生效
小知识的积累,转自 http://hi.baidu.com/moonelf9989/blog/item/1deadf12780fa0c5c2fd789d.html linux 默认打开文件数linux ...