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
类型的键来访问和设置字符串值。你可以根据需要定义任意数量的索引器,只要它们的签名(即参数类型和数量)是唯一的。索引器可以重载,就像方法一样,只要它们的参数列表不同。