tengo un método genéricoLlamando al método genérico con el tipo de variable
Foo<T>
Tengo un tipo de variable bar
¿Es posible lograr algo así como Foo<bar>
Visual Studio está esperando un tipo o espacio de nombres en el bar
Bondad,
Dan
tengo un método genéricoLlamando al método genérico con el tipo de variable
Foo<T>
Tengo un tipo de variable bar
¿Es posible lograr algo así como Foo<bar>
Visual Studio está esperando un tipo o espacio de nombres en el bar
Bondad,
Dan
Asumamos que Foo se declara en clase Test como
public class Test
{
public void Foo<T>() { ... }
}
Necesitas primera crea una instancia del método para el tipo bar
usando MakeGenericMethod. Y luego invocarlo usando reflexión.
var mi = typeof(Test).GetMethod("Foo");
var fooRef = mi.MakeGenericMethod(bar);
fooRef.Invoke(new Test(), null);
Gracias amablemente ... ¡justo lo que necesitaba! –
se puede hacer este tipo de
typeof(Foo<>).MakeGenericType(bar);
Si entiendo bien su pregunta, que tiene, en esencia, los siguientes tipos definidos:
public class Qaz
{
public void Foo<T>(T item)
{
Console.WriteLine(typeof(T).Name);
}
}
public class Bar { }
Ahora, dado que tiene una variable bar
define como tal:
var bar = typeof(Bar);
Desea poder llamar al Foo<T>
, reemplazando T
con su variable de instancia bar
.
Así es como:
// Get the generic method `Foo`
var fooMethod = typeof(Qaz).GetMethod("Foo");
// Make the non-generic method via the `MakeGenericMethod` reflection call.
// Yes - this is confusing Microsoft!!
var fooOfBarMethod = fooMethod.MakeGenericMethod(new[] { bar });
// Invoke the method just like a normal method.
fooOfBarMethod.Invoke(new Qaz(), new object[] { new Bar() });
Enjoy!
+1 ... solo un poco más tarde que la respuesta aceptada, ¡pero maravillosamente! –
@ 'Daniel Elliot' - Sí, lo sé - 41 segundos después. Esperaba que prevaleciera mi respuesta un poco más detallada, pero por desgracia. ;-) – Enigmativity
mi código funciona, la mejor respuesta en detalle ... Gracias –
¿Puedes mostrar algún código donde intentas usarlo? Es definitivamente posible, por lo que es probable que sea un error de sintaxis. – RPM1984