2015-08-14 40 views
-2

例如过去了,如果我有为什么不能可索引类型可以作为一个数组C#

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

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

我为什么不能说?

Bar(new Foo()); 

是否有某种方式传递一个可转位类型的方法作为索引类型的数组?

+1

不,你想要做的是鸭子打字,和c#不支持它。 – MarcinJuraszek

+2

它有一个索引器,但它并不是一个数组。 – dman2306

+0

'float []'永远不会和'Foo'有相同的类型 - 这是不可能的。 –

回答

2

这是一个巨大的错误。索引器是而不是阵列。所以你不能这样做。数组有索引器我知道,但他们的索引器有一个int类型的参数。如果您制作另一个具有Foo类型的索引器,该怎么办?这只是没有任何意义。

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

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

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

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

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

+0

为了使它像阵列一样,他需要实现IList 接口。它是唯一具有索引器的接口(连同'IList'接口)。即使这样也不会将其对象转换为数组。 – xanatos

相关问题