1.索引器的概念
索引器的实质是将类或结构的实例像数组一样进行索引。无需显示指定类型或实例成员。索引器的访问需要使用参数
2.索引器的一些细节
1.索引器
string:表示通过索引器获取数据的类型
this:表示索引器的名字,必须是this,不能修改
index:索引的类型2.索引器是可以进行重载的。
3.在 C# 中可以使用 this 关键字作为属性名声明索引器,并在方括号内声明参数。索引器也可以使用 C# 中任何有效的访问修饰符,在索引器中为 get 和 set 访问器前指定不同的访问修饰符即可。和属性的定义一样,索引器内也需要定义 get 和 set 访问器,其中 get 访问器返回值。 set 访问器分配值。
3.索引器的实际代码编写过程
示例代码:
public string this[int index]
{
get { return Names[index]; }
set { Names[index] = value; }
}
其中get中index 调用索引时的索引值
set中的value是set访问器中内置的,表示调用索引器的分配值。
基本使用规则
索引器的使用基本就是通过[]运算符对索引器进行访问和对元素进行赋值。
namespace Program_Suoyinqi
{
internal class Program
{
static void Main(string[] args)
{
int[] nums = { 1, 2, 3, 4, 5 };
string[] nums2 = { "a", "b", "c" };
List<int> list = new List<int>();
Dictionary<int,string> dic = new Dictionary<int,string>();
Person p =new Person();
Console.WriteLine(p[0]);
Console.WriteLine(p[1]);
p[2] = "张飞";
Console.WriteLine(p[2]);
Console.ReadKey();
Console.WriteLine(p["张三"]);
Console.WriteLine(p["李四"]);
p["王五"] = 100;
Console.WriteLine(p["王五"]);
Console.ReadKey();
}
}
class Person
{
private string[] names = { "张三", "李四", "王五", "赵六" };
private Dictionary<string,int> dic = new Dictionary<string,int>();
public Person()
{
dic.Add("张三", 1);
dic.Add("李四", 2);
dic.Add("王五", 3);
dic.Add("赵六", 4);
}
//索引器
//this必须是this不能更改
//index 索引的类型
public string this[int index]
{
get { return Names[index]; }
set { Names[index] = value; }
}
//索引器是可以重载的
public int this[string key]
{
get { return dic[key]; }
set { dic[key] = value; }
}
public string[] Names { get => names; set => names = value; }//属性
}
}
索引器案例
1.根据员工的姓名、编号、查找员工所在的部门
2.根据员工的姓名、部门、查找员工的编号
3.根据员工的编号、部门、查找员工的姓名
具体代码:
namespace Program2_Suoyinqianli
{
internal class Program
{
static void Main(string[] args)
{
//根据员工的姓名、编号,查找员工所在部门。
//根据员工的姓名、部门,查找员工的编号。
//根据员工的部门、编号,查找员工的姓名。
EmployeeIndexer emps =new EmployeeIndexer();
string dep = emps["张三", 1];
if(!string.IsNullOrEmpty(dep) )
{
Console.WriteLine(dep);
}
else
{
Console.WriteLine("查无此人");
}
int? id = emps["李四", "研发部"];
if( id != null )
{
Console.WriteLine(id);
}
else
{
Console.WriteLine("查无此人");
}
Console.ReadKey();
}
}
class Employee
{
public string Name { get; set;}
public int ID { get; set;}//员工编号
public string Deparment { get; set;}//员工部门
public Employee(string name, int id,string department)
{
this.Name = name;
this.ID = id;
this.Deparment = department;
}
}
class EmployeeIndexer
{
private List<Employee> listEmps= new List<Employee>();
public EmployeeIndexer()
{
listEmps.Add(new Employee("张三", 1, "行政部"));
listEmps.Add(new Employee("李四", 2, "财务部"));
listEmps.Add(new Employee("王五", 3, "研发部"));
listEmps.Add(new Employee("赵六", 4, "人事部"));
}
public string this[string name ,int id]
{
get
{
for(int i = 0;i< listEmps.Count; i++)
{
if (listEmps[i].Name == name && listEmps[i].ID == id)
{
return listEmps[i].Deparment;
}
}
return null;
}
}
//根据员工的姓名、部门,查找员工的编号。
public int? this[string name,string dep]
{
get
{
for(int i = 0;i< listEmps.Count; i++)
{
if (listEmps[i].Name == name && listEmps[i].Deparment == dep)
{
return listEmps[i].ID;
}
}
return null;
}
}
//根据员工的部门、编号,查找员工的姓名。
public string this[int id, string dep]
{
get
{
for (int i = 0; i < listEmps.Count; i++)
{
if (listEmps[i].ID == id && listEmps[i].Deparment == dep)
{
return listEmps[i].Name;
}
}
return null;
}
}
}
}