索引器
介绍
索引器,初学者可能听起来有些陌生,但其实我们经常会用到它,例如:
// 字符串的索引器 string str = "hello world"; char c = str[4]; // 获取到字符串中索引为 4 的字符 // 字典的索引器 var info = new Dictionary<string,string>(); info.Add("name1","张三"); // 从字典中通过索引器获取到 key 为 name1 的值 string name1 = info["name1"];
索引器的创建
看如下实体类:
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 字段进行操作,如下:
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); /* 吃饭,睡觉 */
相关面试题
1、为什么字符串只能 char c = s[5]; ,而不能 s[5] = 'a'; ?
因为字符串类的索引只读,如下:
[__DynamicallyInvokable] [IndexerName("Chars")] public extern char this[int index] { [SecuritySafeCritical, __DynamicallyInvokable, MethodImpl(MethodImplOptions.InternalCall)] get; }
2、C# 中索引器是不是只能根据数字索引?是否允许多个索引器参数?
- 不是只能根据数字索引,例如上面介绍示例中的字典就可以使用字符串。
- 允许多个索引器参数,如上面的 Person 类。