System.Console.WriteLine(u[0]); System.Console.WriteLine(u[1]); System.Console.WriteLine(u[2]);

2.3 话白

是不是很像Dictionary(词典类)的赋值取值方式了?但这只能用数字来索引;

3 字符串索引器

3.1 定义一个索引器类

    public class MySimpleDictionary
        private List<KeyValueEntity> keyValueEntitys = new List<KeyValueEntity>();
        //索引器
        public object this[string key]
                foreach(KeyValueEntity keyValueEntity in keyValueEntitys)
                    if (keyValueEntity.key == key)
                        return keyValueEntity.value;
                return null;
                foreach (KeyValueEntity keyValueEntity in keyValueEntitys)
                    if (keyValueEntity.key == key)
                        keyValueEntity.value = value;
                        return;
                KeyValueEntity newKeyValueEntity = new KeyValueEntity();
                newKeyValueEntity.key = key;
                newKeyValueEntity.value = value;
                keyValueEntitys.Add(newKeyValueEntity);
    public class KeyValueEntity
        public string key { set; get; }
        public object value { set; get; }

  3.2 使用这个索引器类

            MySimpleDictionary mydic = new MySimpleDictionary();
            mydic["testKey0"] = "testValue0";
            mydic["testKey1"] = "testValue1";
            mydic["testKey2"] = "testValue2";
            System.Console.WriteLine(mydic["testKey0"]);
            System.Console.WriteLine(mydic["testKey1"]);
            System.Console.WriteLine(mydic["testKey2"]);

  3.3 话白

    是不是更像Dictionary(词典类)的赋值取值方式了?但这只能用字符串来索引;

  接下来,我们在此基础上改造一个泛型的;

4 泛型索引器

  4.1 定义一个索引器类

    public class MySimpleDictionary<T, U>
        private List<KeyValueEntity<T, U>> keyValueEntitys = new List<KeyValueEntity<T, U>>();
        //索引器
        public U this[T key]
                foreach (KeyValueEntity<T, U> keyValueEntity in keyValueEntitys)
                    if (keyValueEntity.key.Equals(key))
                        return keyValueEntity.value;
                return default(U);
                foreach (KeyValueEntity<T, U> keyValueEntity in keyValueEntitys)
                    if (keyValueEntity.key.Equals(key))
                        keyValueEntity.value = value;
                        return;
                KeyValueEntity<T, U> newKeyValueEntity = new KeyValueEntity<T, U>();
                newKeyValueEntity.key = key;
                newKeyValueEntity.value = value;
                keyValueEntitys.Add(newKeyValueEntity);
    public class KeyValueEntity<T, U>
        public T key { set; get; }
        public U value { set; get; }

  4.2 使用这个索引器类

            MySimpleDictionary<string, string> dic = new MySimpleDictionary<string, string>();
            dic["testKey0"] = "testValue0";
            dic["testKey1"] = "testValue1";
            dic["testKey2"] = "testValue2";
            System.Console.WriteLine(dic["testKey0"]);
            System.Console.WriteLine(dic["testKey1"]);
            System.Console.WriteLine(dic["testKey2"]);

  4.3 白话

  到这里为止,我写的这个【简化版的Dictionary】跟【.net框架的Dictionary】相比还有一点较大的不同,如下:

    1)数据结构算法不同

    我写的词典类,是简单的键值对列表;

    框架的词典类,是动态扩展的数组+hash冲突解决算法,有兴趣的同学去看源码,毕竟我这篇博客主要讲的是索引器;

5 组合索引器

  5.1 定义一个索引器类

    public class MySimpleDictionary
        private List<GroupKeyValueEntity> keyValueEntitys = new List<GroupKeyValueEntity>();
        //索引器
        public object this[string group, string key]
                foreach (GroupKeyValueEntity keyValueEntity in keyValueEntitys)
                    if (keyValueEntity.group == group && keyValueEntity.key == key)
                        return keyValueEntity.value;
                return null;
                foreach (GroupKeyValueEntity keyValueEntity in keyValueEntitys)
                    if (keyValueEntity.group == group && keyValueEntity.key == key)
                        keyValueEntity.value = value;
                        return;
                GroupKeyValueEntity newKeyValueEntity = new GroupKeyValueEntity();
                newKeyValueEntity.group = group;
                newKeyValueEntity.key = key;
                newKeyValueEntity.value = value;
                keyValueEntitys.Add(newKeyValueEntity);
    public class GroupKeyValueEntity
        public string group { set; get; }
        public string key { set; get; }
        public object value { set; get; }

  5.2 使用这个索引器类

            MySimpleDictionary dic = new MySimpleDictionary();
            dic["group0", "key0"] = "value0";
            dic["group0", "key1"] = "value1";
            dic["group0", "key2"] = "value2";
            dic["group1", "key0"] = "value3";
            dic["group1", "key1"] = "value4";
            dic["group1", "key2"] = "value5";
            System.Console.WriteLine(dic["group0", "key0"]);
            System.Console.WriteLine(dic["group0", "key1"]);
            System.Console.WriteLine(dic["group0", "key2"]);
            System.Console.WriteLine(dic["group1", "key0"]);
            System.Console.WriteLine(dic["group1", "key1"]);
            System.Console.WriteLine(dic["group1", "key2"]);

  5.3 白话

  组合索引器不常用,对应的泛型就不在这里赘述了,有兴趣的同学不妨自己改造一下,毕竟泛型的用法还是很简单滴。。。