自定义类型

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

  1. 《C#本质论》读书笔记(16)构建自定义集合

    16.1 更多集合接口 集合类(这里指IEnumerable层次结构)实现的接口层次结构 16.1.1 IList<T>与IDictionary<TKey,TValue> 字典 ...

  2. 使用yield关键字让自定义集合实现foreach遍历

    一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口) 但是我们也可以通过使用yield关键字构建的迭代 ...

  3. UICollectionView(集合视图)以及自定义集合视图

    一.UICollectionView集合视图           其继承自UIScrollView.         UICollectionView类是iOS6新引进的API,用于展示集合视图,布局 ...

  4. [c#基础]集合foreach的必要条件和自定义集合

    引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...

  5. 集合、拆箱、装箱、自定义集合的foreach

    集合部分 参考:http://msdn.microsoft.com/zh-cn/library/0ytkdh4s(v=vs.110).aspx 集合类型是诸如哈希表.队列.堆栈.包.字典和列表等数据集 ...

  6. 十六、C# 常用集合类及构建自定义集合(使用迭代器)

    常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollectio ...

  7. C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能

    1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...

  8. C# 通过IEnumberable接口和IEnumerator接口实现泛型和非泛型自定义集合类型foreach功能

    IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环,如 ...

  9. 【VBA编程】10.自定义集合

    自定义集合类型,类似于变量声明,只是要将Dim关键字和New collection关键字搭配起来使用,其语法描述如下:其中集合名的命名方式同于标准变量的命名 Dim 集合名 As New collec ...

  10. 实现自定义集合的可枚举类型(IEnumerable)和枚举数(IEnumerator )

    下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口: using System; using System.Collections; using Syst ...

随机推荐

  1. git和svn的区别001

    Git和SVN之间的五个基本区别 中文原文地址:http://blog.jobbole.com/31444/ 友情链接git和svn链接2:http://blog.csdn.net/sunboy_20 ...

  2. nginx 配置高并发

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...

  3. dev中如何对combox下拉框设置可消除属性以及ASPxGridView中金额,数量的显示,以及总计、grid中某行值

    下拉框属性关键:IncrementalFilteringMode="StartsWith" DropDownStyle="DropDown" ASPxGridV ...

  4. 二模11day1解题报告

    T1.树的重量(weight) 给出一棵n个叶节点的树(但是有多组数据)以及n个节点之间的距离(最短距离...然而也只有一条路),求树的所有边权之和. 一开始完全没有思路啊...难道爆搜模拟??狂汗. ...

  5. DataGridview焦点不移开不保存数据问题

    this.datagridLeft.ClearSelection();                this.datagridLeft.Refresh();                this. ...

  6. 法线贴图——Normal Mapping

    对于不曾学过.用过法线贴图的人来说,提到法线贴图,经常会提到的问题是什么是法线贴图?法线贴图用于解决什么问题?法线贴图的原理是什么?本文将就这三个问题阐述本人的一些见解,各位不喜勿喷!!! 谈到法线贴 ...

  7. IIS URL重写找不到页面 (URLRewriter.dll伪静态)

    在网站上点右键 属性 进入主目录菜单 点击配置 找到.html扩展名 编辑 将 检查文件是否存在 的钩去掉! OK

  8. javaSE第十一天

    第十一天    63 1:Eclipse的概述使用(掌握)    63 2:API的概述(了解)    63 3:Object类(掌握)    63       第十一天 1:Eclipse的概述使用 ...

  9. android应用商店完整版源码

    这个是从一个安卓学习的网站上转载过来的,android应用商店完整版源码,大家可以看看一下吧. _op><ignore_js_op> <ignore_js_op>< ...

  10. boost:进程管理

    概述 Boost.Process提供了一个灵活的C++ 进程管理框架.它允许C++ developer可以像Java和.Net程序developer那样管理进程.它还提供了管理当前执行进程上下文.创建 ...