索引器,初学者可能听起来有些陌生,但其实咱们常常会用到它,例如:面试
// 字符串的索引器 string str = "hello world"; char c = str[4]; // 获取到字符串中索引为 4 的字符 // 字典的索引器 var info = new Dictionary<string,string>(); info.Add("name1","张三"); // 从字典中经过索引器获取到 key 为 name1 的值 string name1 = info["name1"];
看以下实体类:this
public class Person { private string _value; // 索引器 public string this[int i, int j] { get { Console.WriteLine(i + "" + j + " from get"); return _value; } set { Console.WriteLine(i + "" + j + " from set"); this._value = value; } } }
在该类中建立了一个索引器,能够经过索引器对 Person 类中的 hobbies 字段进行操做,以下:spa
var person = new Person(); // 给 person 对象中的 hobbies 列表属性前三个索引位置插入数据 person[0,0] = "吃饭"; person[1,0] = "睡觉"; person[2,0] = "打豆豆"; person.Hobbies.ForEach(h => { Console.WriteLine(h); }); /* 吃饭 睡觉 打豆豆 */ // 获取 hobbies 列表属性前两个元素 var hobbyStr = person[0,2]; Console.WriteLine(hobbyStr); /* 吃饭,睡觉 */
一、为何字符串只能 char c = s[5]; ,而不能 s[5] = 'a'; ?code
由于字符串类的索引只读,以下:对象
[__DynamicallyInvokable] [IndexerName("Chars")] public extern char this[int index] { [SecuritySafeCritical, __DynamicallyInvokable, MethodImpl(MethodImplOptions.InternalCall)] get; }
二、C# 中索引器是否是只能根据数字索引?是否容许多个索引器参数?blog