2009-12-28 11 views
76

j'invoque une méthode statique Parse sur un type par réflexion parce que je ne connais pas le type de l'objet à la compilation (je ne sais, cependant, il a une méthode Parse , en prenant une chaîne).éviter une exception match ambiguë

Cependant, j'obtiens une exception de correspondance ambiguë, probablement parce qu'il y a beaucoup de méthodes Parse surchargées prenant chacune un seul objet (chaîne, int, double etc.).

Comment est-ce que je peux être plus spécifique dans mon invocation de méthode pour m'assurer que j'atteins la bonne méthode (Parse (string s)) et l'exception n'est pas levée.

Mon code ressemble à ceci:

Type returnType = p.PropertyType; 
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" }); 

Répondre

139

utilisation this surcharge et l'utilisation

returnType.GetMethod("Parse", new [] {typeof(string)}) 
+6

@Bitterblue Je suis confus pourquoi vous écrivez ce commentaire - et pourquoi vous considérez les questions de style à discuter? –

+7

La présentation est bien, il arrive juste de suivre un style différent de celui que vous semblez préférer. Vous avez commenté comme suit: «J'utiliserais ce hangar à vélos, s'il était un peu plus bleuâtre». Ce qui me déroute. Editer le commentaire: A moins que vous n'ayez pas conscience que new [] {} infère le type de Array et _IS_ équivalent à new Type [] dans ce cas? Dans ce cas, je suis désolé - j'ai supposé que vous commentez sur le style (les deux travaux) tout en pensant potentiellement que l'extrait est faux (ce n'est pas le cas). –

+1

Merci pour la réponse, les gars. Pour enregistrer le problème suivant, pour les types de référence, utilisez quelque chose comme ceci: typeof (chaîne) .MakeByRefType(); – BRebey

-2
if (assembly != null) 
{ 
    List<System.Reflection.MethodInfo> mInfo = new List<System.Reflection.MethodInfo>(); 
    Type myType = null; 

    foreach (Type item in assembly.GetTypes()) 
    { 
    mInfo.Clear(); 
    mInfo = item.GetMethods().ToList(); 
    foreach (System.Reflection.MethodInfo item2 in mInfo) 
    { 
     if (item2.Name == methodName) 
     { 
     Method = item2; 
     break; 
     } 
    } 
    } 

    stateInstance = Activator.CreateInstance(myType); 
} 
return Method; 
+0

D'où vient '' Method' '? Cela ne ferait pas de mal d'expliquer un peu ce que fait votre code. – LarsTech

+4

Oui, veuillez éviter les réponses au code uniquement. Ajoutez quelques explications sur ce qui se passe, ou pourquoi votre réponse pourrait être utile. –