Est-il possible de voir quel constructeur était générique?Constructeurs génériques et réflexion
internal class Foo<T>
{
public Foo(T value) {}
public Foo(string value) {}
}
var constructors = typeof(Foo<string>).GetConstructors();
La propriété 'ContainsGenericParameters' me renvoie false pour les deux constructeurs. Est-il possible de découvrir que constructeurs [0] est le générique? Ils ont tous les deux la même signature, mais je voudrais appeler la "vraie" chaîne.
EDIT:
Je veux invoquer le type donné en utilisant
ilGen.Emit(OpCodes.Newobj, constructorInfo);
donc je dois travailler avec la version liée. Mais je voudrais invoquer le "meilleur" constructeur. Cela devrait être le comportement standard. Quand j'appelle
new Foo<string>()
le constructeur avec la chaîne signature (et non celui avec la signature générique) est appelée. La même chose devrait arriver avec mon code.
Merci pour votre réponse - le problème ici est que vous utilisez "Type t = typeof (Foo <>);" - il ne fonctionnera plus avec "Type t = typeof (Foo);" –
tanascius
appelle GetGenericTypeDefinition() pour l'obtenir sur Foo <> alors les index du constructeur sont toujours mappés sur le même constructeur. Donc, vous pouvez réfléchir sur Foo <> .. ctor pour trouver l'index correct puis utilisez le Foo ..ctor correspondant à votre générateur IL. Autant que je sache, vous perdez tous les génériques quand vous allez avec Foo –
GetGenericTypeDefinition() était exactement ce que j'ai raté. Merci beaucoup! – tanascius