Type
- это класс, экземпляры которого описывают тип, и это не то же самое, что аргумент типа в универсальной функции, что, вероятно, то, что вам нужно здесь.
Вот небольшой законченный примеррабочего решения:
using System.Collections.Generic;
class GameObject { }
class Ball : GameObject { }
class Rope : GameObject { }
class Program {
static GameObject[] _go = new GameObject[] {
new Ball(),
new Rope()
};
static List<TGameObject> ObjectsByType<TGameObject>() where TGameObject : GameObject {
List<TGameObject> gameObjects = new List<TGameObject>();
foreach (var gameObject in _go) {
TGameObject tobj = gameObject as TGameObject;
if (tobj != null) {
gameObjects.Add(tobj);
}
}
return gameObjects;
}
}
Также обратите внимание, что если вы используете LINQ, вы можете сделать что-то вроде этого:
using System.Linq;
static List<TGameObject> ObjectsByType<TGameObject>() where TGameObject : GameObject {
return _go.OfType<TGameObject>().ToList();
}
В этот момент вам практически не нужна функциябольше, и вы можете просто использовать OfType
.