Ho un metodo genericochiamata metodo generico con la variabile tipo
Foo<T>
Ho un tipo di variabile bar
E 'possibile realizzare qualcosa di simile Foo<bar>
Visual Studio è in attesa di un tipo o spazio dei nomi al bar.
Gentilezza,
Dan
Ho un metodo genericochiamata metodo generico con la variabile tipo
Foo<T>
Ho un tipo di variabile bar
E 'possibile realizzare qualcosa di simile Foo<bar>
Visual Studio è in attesa di un tipo o spazio dei nomi al bar.
Gentilezza,
Dan
lascia supporre che Foo viene dichiarata in class Test come
public class Test
{
public void Foo<T>() { ... }
}
È necessario prima istanziare il metodo per il tipo bar
utilizzando MakeGenericMethod. E poi invocalo usando la riflessione.
var mi = typeof(Test).GetMethod("Foo");
var fooRef = mi.MakeGenericMethod(bar);
fooRef.Invoke(new Test(), null);
Grazie gentilmente ... proprio quello di cui avevo bisogno! –
si può fare questo tipo da
typeof(Foo<>).MakeGenericType(bar);
Se ho capito bene la tua domanda, si hanno, in sostanza, i seguenti tipi definiti:
public class Qaz
{
public void Foo<T>(T item)
{
Console.WriteLine(typeof(T).Name);
}
}
public class Bar { }
Ora, data avete una variabile bar
definito come tale:
var bar = typeof(Bar);
Quindi si desidera poter chiamare Foo<T>
, sostituendo T
con la variabile di istanza bar
.
Ecco come:
// 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 po 'più tardi della risposta accettata ma meravigliosamente messa! –
@ 'Daniel Elliot' - Sì, lo so - 41 secondi dopo. Speravo che la mia risposta un po 'più dettagliata avrebbe prevalso, ma ahimè. ;-) – Enigmativity
il mio codice ottiene lavoro, la risposta migliore in dettaglio .... Grazie –
Puoi mostrare del codice dove stai tentando di usarlo? È assolutamente possibile, quindi è probabile un errore di sintassi. – RPM1984