Edit:Llamando al método genérico con un argumento tipo conocido solo en tiempo de ejecución
Por supuesto, mi código real no se ve exactamente así. Traté de escribir semi-pseudocódigo para que fuera más claro de lo que quería hacer.
Parece que simplemente ha estropeado las cosas en su lugar.
Por lo tanto, lo que realmente me gustaría hacer es la siguiente:
Method<Interface1>();
Method<Interface2>();
Method<Interface3>();
...
Bueno ... pensé que tal vez podría convertirlo en un bucle que utiliza la reflexión. Entonces la pregunta es: ¿Cómo lo hago? Tengo muy poco profundo conocimiento de la reflexión. Entonces, los ejemplos de código serían geniales.
El escenario es similar a esto:
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!
}
Original post:
Hola!
Estoy tratando de bucle a través de todas las interfaces en un espacio de nombres y enviarlos como argumentos a un método genérico de esta manera:
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!
}
}
El error que consigo es "nombre de tipo esperado, pero el nombre de variable local encontrado ". Si intento
...
foreach(var interface in interfaces)
{
Method<interface.MakeGenericType()>(); // Still get compile error here!
}
}
me sale "No se puede aplicar operador < 'a operandos de tipo 'grupo Método' y 'System.Type'" Cualquier idea sobre cómo solucionar este problema?
Me gustaría resumir el método genérico, según el tipo. Pero si lo hago utilizando la reflexión, y luego corto el generado, entiendo que no será lo que quiero. ¿Adivino que es imposible? ¿O es eso? Codifique el método genérico para todos los tipos en una lista ... –
@Stephane: Es difícil saber exactamente lo que está tratando de hacer. Te sugiero que hagas una nueva pregunta con más detalles. –
Tenga en cuenta que puede obtener "correspondencia ambigua en la resolución del método" en 'GetMethod()'. Esto sucede cuando el método que intentas obtener tiene algunas sobrecargas. Por lo tanto, debe especificar cuál desea utilizando 'GetMethod (" Nombre ", nuevo Tipo [] {argumentos})' – cvsguimaraes