A Type
объект содержит информацию о типе.Это не сам тип.Вы хотите использовать дженерики
private T GetComponent<T>()
where T : Component
{
T component;
for (int i = 0; i < sceneObjectsLength; i++)
{
component = (T)sceneObjects[i].GetComponent(typeof(T));
}
return component;
}
Вы можете вызвать его с помощью:
Circle circle = GetComponent<Circle>();
Однако у вас есть локальная проблема.return
возвращает только один компонент, но вы пытаетесь получить несколько компонентов в цикле.Если вы намеревались вернуть первый компонент этого типа, вы должны написать
private T GetComponent<T>()
where T : Component
{
return sceneObjects
.Select(obj => obj.GetComponent(typeof(T)))
.Where(obj => obj != null)
.FirstOrDefault();
}
Вы можете получить все объекты типа из всех игровых объектов с помощью
private IEnumerable<T> GetComponents<T>()
where T : Component
{
return sceneObjects
.SelectMany(obj => obj.GetComponents<T>());
}
Вы получили ошибку в var component;
, поскольку var
можно использовать только в том случае, если компилятор может определить тип, как в var component = new Circle();
.Здесь var
подразумевается как Circle
.var
не похож на базовый тип Variant
, который может принимать значение любого типа.Он просто запрещает вам писать имя типа дважды, как в Circle component = new Circle();