Привет я следующий метод расширенияВ противном случае бросить в общий массив
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[]
, но когда я бросаю каждый элемент отдельно, он работает (первый пример). Почему это ?
Ну да - если вы создали 'Компонент []', это * не * a 'FooComponent []' или какой-либо 'T'. Почему бы просто не использовать 'OfType() .ToArray()'? Почему вы называете 'Cast ()'? –
'Cast()' не имеет смысла. Если вы хотите 'T', зачем снова его переводить в« Компонент »? –
Resharper заставил меня сделать это @JonSkeet :) – mashinkata