为什么不能将可索引类型作为数组c#传递

时间:2015-08-14 23:21:59

标签: c# indexing

例如,如果我有

class Foo{
    public float this[
        int index
    ] { get ...; set ...; }

}
....
void Bar(float[] array){...}

为什么我不能说这个?

 Bar(new Foo());

有没有办法将索引类型作为索引类型的数组传递给方法?

1 个答案:

答案 0 :(得分:2)

这是一个很大的错误。索引器是不是数组。所以你不能这样作弊。数组有我知道的索引器,但它们的索引器有一个int类型的参数。如果您创建另一个类型为Foo的索引器,该怎么办?这没有任何意义。

要真正使Foo像数组一样,实现一些接口。例如,IEnumerable<float>IEnumerator<float>

现在,在Bar方法中,将参数类型更改为IEnumerable<float>。现在,您可以传递Foo对象或float的数组。

有关如何实施IEnumerable界面的信息,请参阅

https://msdn.microsoft.com/en-us/library/9eekhta0(v=vs.110).aspx

您可以在“示例”部分中看到它。