Я сканирую определенное пространство имен для типов, которые реализуют интерфейс, и пытаюсь вернуть их как этот интерфейс, а не просто Type, но я получаю InvalidCastException
IEnumerable<IGameScript> GetDemos()
{
var results = Assembly.GetExecutingAssembly().GetTypes()
.Where(
x => x.IsClass
&& x.Namespace == "MMOClass.CodeBase.Demos"
&& x.Name.Contains("Demo")
&& x.GetInterfaces().Contains(typeof(IGameScript))
).Select(x => x);
return results.Cast<IGameScript>();
}
Обновлениев ответ на ответ Рида:
IEnumerable<IGameScript> GetDemos()
{
var results = Assembly.GetExecutingAssembly().GetTypes()
.Where(
x => x.IsClass
&& x.Namespace == "MMOClass.CodeBase.Demos"
&& x.Name.Contains("Demo")
&& x.GetInterfaces().Contains(typeof(IGameScript))
).Select(x => Activator.CreateInstance(x) as IGameScript);
return results;
}