Impossible de convertir de 'méthode de groupe" à " le Système de.Action<object>' erreur
J'ai créé la fonction suivante:
public void DelegatedCall(Action<Object> delegatedMethod)
Et défini la méthode suivante
public void foo1(String str) { }
Cependant, lorsque j'essaie d'appeler DelegateCall
avec foo1
:
DelegatedCall(foo1);
...Je reçois l'erreur suivante compilateur:
Argument 1: cannot convert from 'method group' to 'System.Action<object>'
Quelle est la raison de cette erreur et comment la corriger? Malheureusement, le casting foo1
à Action
n'est pas une option.
Vous devez vous connecter pour publier un commentaire.
DelegatedCall
s'attend à un délégué qui prend touteobject
comme argument. Mais votre fonctionfoo1
que vous êtes de passage àDelegatedCall
ne peut faire face à unestring
argument. Ainsi, la conversion n'est pas de type sécurisé et n'est donc pas possible.Les paramètres d'entrée sont contre-variante, mais votre code doit la covariance. (Voir La différence entre la Covariance & Contra-variance.)
Vous pouvez faire
DelegatedCall
générique:...ou il prennent tout délégué:
Mais alors la mise en œuvre, il est laid et nécessite une réflexion. Il n'a pas également de vérifier que la fonction n'a qu'un seul paramètre à la compilation.
Variance ne fonctionne pas de cette façon autour; vous devez
Que même dans la version 4.0, il ne veut pas croire que chaque objet est une chaîne de caractères.
Noter que si il a été
foo1(object)
etAction<string>
(c'est à dire l'inverse), il serait probablement de travail (dans la version 4.0), puisque chaque chaîne est un objet.