【发布时间】:2016-12-02 11:16:07
【问题描述】:
你好我有以下扩展方法
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<T>().ToArray()?你为什么打电话给Cast<Component>()? -
Cast<Component>()没有意义。如果你想要T's,为什么要再次将其转换为Component? -
Resharper 让我这样做@JonSkeet :)
标签: c# arrays generics casting