我有一個看起來像的方法:是否將IList <T>轉換爲T []類型的數組導致枚舉?
T[] field;
public Method(IList<T> argument)
{
this.field = (T[])argument;
}
當執行方法體投中確實枚舉發生的呢?如果底層類型不同,會不會改變?
我有一個看起來像的方法:是否將IList <T>轉換爲T []類型的數組導致枚舉?
T[] field;
public Method(IList<T> argument)
{
this.field = (T[])argument;
}
當執行方法體投中確實枚舉發生的呢?如果底層類型不同,會不會改變?
不,它不會枚舉任何東西。如果argument
實際上是是 a T[]
,它將成功,或者如果不是,則拋出InvalidCastException
異常。 (或者返回null如果argument
爲空。)
我們不應該說這個可能是壞設計嗎?調用者可以更改列表,爲什麼該方法不是首先使用數組? – Steven 2010-03-16 15:51:16
如果argument
是(T
類型的)的陣列的引用,那麼就沒有枚舉 - 它是一個簡單的鑄造。
如果argument
是對List<T>
或另一個實現IList的類的引用,那麼可能會有一個轉換異常。 (我很有說法,因爲可能有暗示或明確轉換爲T[]
--最有可能不會)。
編輯:正如Jon指出的那樣,在泛型方法中不會進行轉換,所以上面的括號是不正確的。
即使轉換* *存在,它也不會被使用 - 因爲編譯器在編譯時不知道它。 – 2010-03-16 15:15:34
@Jon:不知道我跟着 - 我剛剛測試了一個明確的轉換,它投下罰款。編輯:我收回(在我的測試中的錯誤)。你確實是對的。 – 2010-03-16 15:24:01
另一方面,通過執行field = argument.ToArray()來枚舉枚舉,可以實現這一目標。 – 2010-03-16 15:17:02