从代码学Index
Indexer
(索引)|----->索引器可以简化C#类型信息的访问<-----|
-
索引器是承担各种检索和查找的工作
-
分为以下几种模式进行应用:
-
单列集合访问:
public class SingleColumn { private static string[] countries = new string[]{}; //访问器的规则 public string this[int index] { get { return countries[index]; } } public string[] this[string name] { get { if(countries == null || countries.Length <=0) { return null; } return Array.FindAll<string>(countries,(candicate)=>{ return candicate.StartWith(name); }) } } }
-
多列集合访问
public class MultiColumn { private static DataSet data = new DataSet(); static MultiColumn() { data.Tables.Add("Data"); data.Tables[0].Columns.Add("name"); data.Tables[0].Columns.Add("gender"); } }
-
具有联合索引的类的创建:
public struct Employee { public string FirstName; public string LastName; public string Title; public Employee(DataRow row) { this.FirstName = row["FirstName"] as string; this.LastName = row["LastName"] as string; this.Title = row["Title"] as string; } } public class Staff { static DataTable data = new DataTable(); static Staff() { data.Columns.Add("FirstName"); data.Columns.Add("LastName"); data.Columns.Add("Title"); //pk:f+l data.PrimaryKey = new DataColumn[]{data.Columns[0],data.Columns[1]}; data.Rows.Add("Joseph","Doe","Manager"); data.Rows.Add("Simon","Kobe","HR"); } //基于联合的PK查询 public Employee this[string firstName,string lastName] { get { DataRow row = data.Rows.Find(new object[]{firstName,lastName}); return new Employee(row); } } }
-
通过委托传递索引规则:
public class Dashboard { float[] temps = new float[10]{}; public float this[Predicate<float> predicate] { get { float[] matches = Array.FindAll<float>(temps,predicate); } } } //调用时更酷炫 Dashboard db = new Dashboard(); float actual = dashboard[(data)=>{ return data>63F; }];
-
总结
感受到了 this
在数组中的酷炫了吧?但是,不要忘了这个索引的本质就是微软提供的数组或者DataTable
在作祟罢了。