嗨,我有以下的擴展方法未能轉換爲普通陣列
public static T[] GetComponentsOfType<T>(this GameObject source) where T : MonoBehaviour
{
Component[] matchingComponents = source.GetComponents<Component>().Where(comp => comp is T).ToArray();
T[] castedComponents = new T[matchingComponents.Length];
for (int i = 0; i < matchingComponents.Length; i++)
{
castedComponents[i] = (T) matchingComponents[i];
}
return castedComponents;
}
其中一期工程完全沒問題,但是我試圖通過只是一個單一的線縮短
return (T[]) source.GetComponents<Component>().OfType<T>().Cast<Component>().ToArray();
而且很顯然,這條線失敗將Component[]
轉換爲T[]
,但是當我分別投射每個元素時,它會起作用(第一個示例)。這是爲什麼 ?
好的 - 如果你已經創建了一個Component [],那*不是'FooComponent []'或者任何'T'。爲什麼不使用'OfType().ToArray()'?你爲什麼打電話給'Cast ()'? –
'Cast()'沒有意義。如果你想要'T',爲什麼要再次將它轉換爲'Component'? –
Resharper讓我這麼做@JonSkeet :) – mashinkata