应该';t索引器适用于任何输入类型
本文关键字:适用于 任何 输入 类型 索引 应该 | 更新日期: 2023-09-27 18:22:11
根据此
"索引器不必通过整数值进行索引;它最多为您如何定义特定的查找机制。"
然而,下面的代码出现异常
未处理的异常:System.IndexOutOfRangeException:索引为在数组的边界之外。
using System;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
private static string fruits;
static void Main(string[] args)
{
fruits = "Apple,Banana,Cantaloupe";
Console.WriteLine(fruits['B']);
}
public string this[char c] // indexer
{
get
{
var x= fruits.Split(',');
return x.Select(f => f.StartsWith(c.ToString())).SingleOrDefault().ToString();
}
}
}
}
上面的代码不应该使用char索引而不是int索引吗?
您的链接指的是您自己定义的索引器:
public T this[int i]
但是,您使用的不是您定义的索引器,而是string
类的索引器。该类被定义为接受int
参数。
其他类由其他类型索引-例如,Dictionary<TKey,TValue>
由TKey
索引:
var dic = new Dictionary<string,int>();
dic["hello"] = 1;
您在示例中没有使用索引器,为类Program
创建了索引器,但需要在类String
上使用索引器。
即使索引器期望int是一个字符,但它仍然可以工作的原因是int
是可转换的,所以在您的代码中,您实际上是在进行
Console.WriteLine(fruits[((int)'B')]);
Main是一个静态方法,您正试图访问类Program
的非静态属性。您定义的索引器甚至没有远程连接到String
类。为了引用索引器,您需要:
Program program = new Program();
program.fruits = "Bananas";
Console.WriteLine(program['B']);
但是上面的代码很糟糕,你永远不应该使用这样一个怪物。相反,声明另一个类并在那里实现索引器;