Edit:
Конечно, мой настоящий код выглядит не так. Я попытался написать полу-псевдокод, чтобы сделать его более ясным из того, что я хотел сделать.
Похоже, что это просто испортило ситуацию.
Итак, что я действительно хотел бы сделать, так это:
Method<Interface1>();
Method<Interface2>();
Method<Interface3>();
...
Ну... Я думал, что, может быть, я могу превратить его в цикл, используя отражение. Поэтому возникает вопрос: как мне это сделать. У меня очень мелкое знание рефлексии. Поэтому примеры кода были бы замечательными.
Сценарий выглядит следующим образом:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var i in interfaces)
{
Method<i>(); // Get compile error here!
}
Оригинальное сообщение:
Привет!
Я пытаюсь перебрать все интерфейсы в пространстве имен и отправить их в качестве аргументов в общий метод, подобный этому:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var interface in interfaces)
{
Method<interface>(); // Get compile error here!
}
}
Ошибка, которую я получаю, - "Имя типа ожидается, но локальное имя переменной найдено". Если я попробую
...
foreach(var interface in interfaces)
{
Method<interface.MakeGenericType()>(); // Still get compile error here!
}
}
Я получаю "Не могу применить оператор" < ' к операндам типа "группа методов" и "System.Type" " Любая идея о том, как обойти эту проблему?