嗨,我有以下的扩展方法未能转换为普通阵列
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