自定义类型

 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. POI实现word文档转html文件

    POI word文件转html package com.feiruo.officeConvert; import java.io.BufferedWriter; import java.io.File ...

  2. oracle限制用户连接数

    查看是否启用限制配置 SQL> show parameter resource_limit; 或者 select * from v$parameterwhere name = 'resource ...

  3. struts2文件上传大小限制问题小结

    一:首先看一下程序执行中出现的对应报错信息,如下所示: [WARN ] 2015-03-03 15:31:11 :Unable to parse request org.apache.commons. ...

  4. SQL 如果存在就更新,如果不存在就添加,使用 Merge 函数(SQL2008版本及以上)

    USE [NationalUnion] GO /****** Object: StoredProcedure [dbo].[proc_DataSummary] Script Date: 07/03/2 ...

  5. new 、operator new 和 placement new

    一.原生operator new 我们先从原生operator new开始.考虑如下代码,它用来分配5个int型的空间并返回指向他们的指针[1]: int* v = static_cast<in ...

  6. pb中打开窗口并传递参数

    try long ll_result; ll_result=1;openwithparm(w_sb_order,UserCode);catch(RuntimeError er)  errorMsg=e ...

  7. HTTP Status 500 - javax.servlet.ServletException

    运行某个jsp页面时提示 type Exception report message javax.servlet.ServletException: java.lang.NoClassDefFound ...

  8. meta基础知识

    H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-width,initia ...

  9. Bypass pattern lock on Sony Xperia Z2 and backup all data

    Yesterday she came to me with a Sony Xperia Z2 D6503. Guess what? She forgot the pattern so she coul ...

  10. JavaScript编程规范

    最近看NodeJS中,有一部分写JS约定俗成的编程规范(附录B,详情参考附件),感觉在实际工作中能用到, 大致意思分享给大家,详情参考附件: 1.缩进:建议两空格 作为Node.js代码的缩进标记: ...