用索引器简化的C#类型信息访问

“C#中的Indexer给人一种更’透彻’的感觉,集合类型就是集合类型,有自己专用但又最简洁的访问方式,而且同一类型可以有不同的索引访问方式。”

   --《设计模式_基于C#的工程化实现及扩展》

示例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BangWorks.PractcalPattern.Concept.Inder
{
    public class SingleColumnCollection
    {
        //实现一个字符串数组,以便用索引器访问
        string[] Names = new string[] { "BangChen", "BangJiang", "Data" };

        //实现数字索引器
        public string this[int index]
        {
            get { return Names[index]; }
        }
        //实现字符串索引器
        public string[] this[string strIndex]
        {
            get
            {
                if ((Names == null) || (Names.Length <= 0)) return null;
                return Array.FindAll<string>(Names, delegate(string cadicate)
                {return cadicate.StartsWith(strIndex);});
            }

        }
    }
}

单元测试

/// <summary>
        ///Item 的测试
        ///</summary>
        [TestMethod()]
        public void ItemTest()
        {
            SingleColumnCollection target = new SingleColumnCollection(); // TODO: 初始化为适当的值
            int index = 0; // TODO: 初始化为适当的值
            string actual;
            actual = target[index];
            Assert.AreEqual( "BangChen",actual);
        }

        /// <summary>
        ///Item 的测试
        ///</summary>
        [TestMethod()]
        public void ItemTest1()
        {
            SingleColumnCollection target = new SingleColumnCollection(); // TODO: 初始化为适当的值
            string strIndex = "Bang"; // TODO: 初始化为适当的值
            string[] actual;
            actual = target[strIndex];
            Assert.AreEqual<int>(2,actual.Length);
        }

小提示
在Vs中,输入indexer,再键入Tab键,可以利用vs自带indexer模板,创建自己的索引。
原文地址:https://www.cnblogs.com/kissazi2/p/2964075.html