2010-03-16 51 views
3

我有一個看起來像的方法:是否將IList <T>轉換爲T []類型的數組導致枚舉?

T[] field; 

public Method(IList<T> argument) 
{ 
    this.field = (T[])argument; 
} 

當執行方法體投中確實枚舉發生的呢?如果底層類型不同,會不會改變?

+2

另一方面,通過執行field = argument.ToArray()來枚舉枚舉,可以實現這一目標。 – 2010-03-16 15:17:02

回答

8

不,它不會枚舉任何東西。如果argument實際上是 a T[],它將成功,或者如果不是,則拋出InvalidCastException異常。 (或者返回null如果argument爲空。)

+0

我們不應該說這個可能是壞設計嗎?調用者可以更改列表,爲什麼該方法不是首先使用數組? – Steven 2010-03-16 15:51:16

4

如果argument是(T類型的)的陣列的引用,那麼就沒有枚舉 - 它是一個簡單的鑄造。

如果argument是對List<T>或另一個實現IList的類的引用,那麼可能會有一個轉換異常。 (我很有說法,因爲可能有暗示或明確轉換爲T[]--最有可能不會)。

編輯:正如Jon指出的那樣,在泛型方法中不會進行轉換,所以上面的括號是不正確的。

+2

即使轉換* *存在,它也不會被使用 - 因爲編譯器在編譯時不知道它。 – 2010-03-16 15:15:34

+0

@Jon:不知道我跟着 - 我剛剛測試了一個明確的轉換,它投下罰款。編輯:我收回(在我的測試中的錯誤)。你確實是對的。 – 2010-03-16 15:24:01

相關問題