2015-08-14 43 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

相關問題