跳到主要内容

C#种索引器实现过程,是否只能根据数字索引?

参考答案:

在C#中,索引器允许类或结构的实例像数组一样进行索引。它们提供了一种语法,使得对象可以通过索引(比如数组索引)来访问其成员,使得对象的操作看起来更像是对数组或集合的操作。

索引器不仅可以根据数字进行索引,还可以根据任何类型的索引。这意味着你可以定义基于字符串、自定义类型或其他任何类型的索引器。

下面是一个简单的例子,展示了如何使用索引器根据字符串键来访问字典中的数据:

public class MyDictionary
{
    private Dictionary<string, string> _dictionary = new Dictionary<string, string>();

    // 索引器,根据字符串键进行索引
    public string this[string key]
    {
        get
        {
            if (_dictionary.ContainsKey(key))
            {
                return _dictionary[key];
            }
            else
            {
                throw new KeyNotFoundException("The given key was not present in the dictionary.");
            }
        }
        set
        {
            _dictionary[key] = value;
        }
    }
}

// 使用示例
class Program
{
    static void Main()
    {
        MyDictionary dict = new MyDictionary();
        dict["key1"] = "value1"; // 设置索引器值
        Console.WriteLine(dict["key1"]); // 获取索引器值,输出 "value1"
    }
}

在上面的例子中,MyDictionary 类定义了一个索引器,它接受一个字符串类型的键,并允许你像操作数组一样来获取或设置与该键关联的值。

如果你想要根据自定义类型或其他非数字类型来定义索引器,你可以简单地将索引器的参数类型更改为所需的类型。例如,如果你有一个基于日期的索引器,你可以这样做:

public class DateIndexedCollection
{
    private Dictionary<DateTime, string> _collection = new Dictionary<DateTime, string>();

    // 索引器,根据DateTime进行索引
    public string this[DateTime date]
    {
        get => _collection[date];
        set => _collection[date] = value;
    }
}

在这个例子中,索引器使用 DateTime 类型的键来访问和设置字符串值。你可以根据需要定义任意数量的索引器,只要它们的签名(即参数类型和数量)是唯一的。索引器可以重载,就像方法一样,只要它们的参数列表不同。