[C#] 索引子的基本運用

  • 2155
  • 0
  • C#
  • 2016-05-31

之前雖然有看過C#的「索引子 (Indexers)」,但沒有進一步去了解它的用法。最近聽到別人的介紹,才發覺「索引子」運用得宜的話,對程式的可讀性會加分不少。

程式範例

使用簡單的「課程」及「學生」來做介紹

public class Student
{
    public int Number { get; set; }

    public string Name { get; set; }
}
public class Course
{
    public Course(string name)
    {
        Name = name;
        Members = new List<Student>();
    }

    public string Name { get; private set; }

    public List<Student> Members { get; private set; }

    public void AddStudent(Student member)
    {
        Members.Add(member);
    }
}

當需要找尋某個號碼的學生資訊,程式就會像下面這樣。第一種作法是沒有「索引子」,第二種則是使用「索引子」的做法。

Course course = new Course("C#");
course.AddStudent(new Student { Name = "brian", Number = 1 });
int queryNumber = 1;

//一般作法
Console.WriteLine(course.Members.First(s => s.Number == queryNumber).Name);

//索引子作法
Console.WriteLine(course[queryNumber].Name);

Console.ReadKey();

對比之下,索引子的做法可讀性會好非常多。接著來看一下「索引子」要如何實作。

public Student this[int number]
{
    get
    {
        return Members.FirstOrDefault(s => s.Number == number);
    }
}
  1. 「索引子」和「屬性(Property)」類似,都有get與set
  2. 用 this關鍵字
  3. 後面的參數可使用多種型態,比較常用的有 int 及 string
  4. 參數可多個

整體來說,「索引子」算是非常單純的一種運用,之後我在設計程式的時候應該會很常用到。

 

參考資料

https://msdn.microsoft.com/zh-tw/library/6x16t2tx.aspx