我有兩種方法,像這樣:這是C#鑄造無用?
Foo[] GetFoos(Type t) { //do some stuff and return an array of things of type T }
T[] GetFoos<T>()
where T : Foo
{
return GetFoos(typeof(T)) as T[];
}
然而,這似乎總是返回null。我做錯了什麼或者這只是C#的一個缺點?
注: 我知道我可以解決這個問題:
GetFoos(typeof(T)).Cast<T>().ToArray();
不過,我寧願做這個wothout任何分配(在垃圾收集非常敏感的環境中工作)。
鈮++: 獎勵積分,如果你認爲一個可選的非分配解決方案
編輯: 這就提出了一個有趣的問題。 MSDN文檔如下:http://msdn.microsoft.com/en-us/library/aa664572%28v=vs.71%29.aspx表示如果存在隱式或顯式強制轉換,則強制轉換將成功。在這種情況下,有明確的演員陣容,所以演員陣容應該成功。 MSDN文檔是否錯誤?
當你這樣做會發生什麼:'(T [])GetFoos(typeof運算(T))' – Will 2011-04-25 02:17:40
請問:'InvalidCastException'。如果'as'返回'null',則直接投射將不會成功。 – Femaref 2011-04-25 02:18:57
'GetFoos()'實現被鎖定,你不能改變它?可能最理想的情況是(除了使用泛型),如果它返回一個非特定的'Array'。然後它可以返回一個這種類型的東西,你可以安全地將它轉換爲你需要的類型。 – 2011-04-25 02:32:31