How do I overload the [] operator in C#
本问题已经有最佳答案,请猛点这里访问。
我想给一个班增加一个接线员。我现在有一个
1 2 3 4 5 6 7 8 9 | class A { private List<int> values = new List<int>(); public int GetValue(int index) { return values[index]; } } |
1 2 3 4 5 6 7 8 9 10 11 | public int this[int key] { get { return GetValue(key); } set { SetValue(key,value); } } |
我相信这就是你想要的:
索引器(C编程指南)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class SampleCollection<T> { private T[] arr = new T[100]; public T this[int i] { get { return arr[i]; } set { arr[i] = value; } } } // This class shows how client code uses the indexer class Program { static void Main(string[] args) { SampleCollection<string> stringCollection = new SampleCollection<string>(); stringCollection[0] ="Hello, World"; System.Console.WriteLine(stringCollection[0]); } } |
号
[]运算符被称为索引器。可以提供采用整数、字符串或要用作键的任何其他类型的索引器。语法很简单,遵循与属性访问器相同的原则。
例如,在您的情况下,其中
1 2 3 4 5 6 7 | public int this[int index] { get { return GetValue(index); } } |
。
您还可以添加一个set访问器,这样索引器就变成了读写的,而不仅仅是只读的。
1 2 3 4 5 6 7 8 9 10 11 12 | public int this[int index] { get { return GetValue(index); } set { SetValue(index, value); } } |
如果要使用其他类型进行索引,只需更改索引器的签名。
1 2 | public int this[string index] ... |
。
1 2 3 4 5 6 7 | public int this[int index] { get { return values[index]; } } |