多列集合的索引器实现
單列索引器的實現(xiàn),在上一篇博文中已經(jīng)談到。本文將主要探討多列集合的索引器的實現(xiàn)方式。
下面的代碼只是利用System.Data下的DataSet來展示多列集合的索引的效果
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data;namespace BangWorks.PractcalPattern.Concept.Inder {public class MultiColumnCollectionTest{private static DataSet _Data=new DataSet();public DataSet Data{get { return _Data; }// set { _Data = value; } }public MultiColumnCollectionTest(){_Data.Tables.Add("DataTable");_Data.Tables[0].Columns.Add("Name");_Data.Tables[0].Columns.Add("Age");_Data.Tables[0].Rows.Add(new string[] { "ChenZheRong", "23" });_Data.Tables[0].Rows.Add(new string[] { "JiangShaoHua", "23" });} } }通過查看定義,我們知道了_Data.Tables所屬的DataTableCollection類,其實是一個實現(xiàn)了索引器的類,他擁有Columns這個屬性。
Columns字段所屬的DataColumnCollection類的定義。借助最上方的多列集合的索引的效果代碼,我們知道,這個DataColumnCollection類同樣實現(xiàn)了索引器。
?
所以,我們得出一個結(jié)論:想要實現(xiàn)多列集合多重索引器的效果,只要遞歸地在實現(xiàn)了索引器的類的屬性或字段中,再次實現(xiàn)索引器即可。
我承認(rèn)挺拗口的,下面上一段代碼說明。
補(bǔ)充說明:為了方便演示,我們在每個類的構(gòu)造函數(shù)里面自動為他們自身的字段賦一個初值,以便演示。
using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace BangWorks.PractcalPattern.Concept.Inder {public class PeopleColumns{//找出具有相同名稱的人public NameColumns[] this[String strIndex]{get{return Array.FindAll<NameColumns>(_Name, delegate(NameColumns NameRow){return NameRow.Name.StartsWith(strIndex);});}//返回子索引器 }private NameColumns[] _Name;public PeopleColumns(){_Name = new NameColumns[] { new NameColumns("XiaoMing"), new NameColumns("XiaoMing"), new NameColumns("XiaoDong"), new NameColumns("LiSan") };}/// <summary>/// 姓名索引器/// </summary>public class NameColumns{public NameColumns(string Name){this.Name = Name;}public string Name;//為了區(qū)別子索引器,我們增加一個名稱屬性,以便突出演示的效果public GenderColumns this[int index]{get { return Sexs[index]; }}public GenderColumns[] Sexs = new GenderColumns[] { new GenderColumns("Man"), new GenderColumns("Female") };/// <summary>/// 性別索引器/// </summary>public class GenderColumns{private string Gender;public GenderColumns(string Gender){this.Gender = Gender;Ages = new string[] { Gender + "1", Gender + "2", Gender + "3" };//這里加上性別的前綴,以便區(qū)分年齡 }public string[] Ages;public object this[int index]{get { return Ages[index]; }}}}} }單元測試
[TestMethod()]public void ItemTest(){PeopleColumns target = new PeopleColumns(); // TODO: 初始化為適當(dāng)?shù)闹?/span>string strIndex = "Xiao"; // 獲取姓名字符串開頭為Xiao的人 PeopleColumns.NameColumns[] actual;actual = target[strIndex];Assert.AreEqual<int>(3, actual.Length);//3個符合string[] actualAge = actual[0].Sexs[1].Ages;Assert.AreEqual<int>(3, actualAge.Length);//3個符合Assert.AreEqual<string>("Female1", actualAge[0]);}
作者:kissazi2?
出處:http://www.cnblogs.com/kissazi2/?
本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
轉(zhuǎn)載:http://www.cnblogs.com/kissazi2/archive/2013/03/17/2964478.html
總結(jié)
以上是生活随笔為你收集整理的多列集合的索引器实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ -- Hello wo
- 下一篇: nvcpl.dll是什么