Passer l'action des délégués comme paramètre en C#
J'ai une méthode qui accepte un Action
délégué et exécute la méthode donnée, comme indiqué ici:
public void ExpMethod(Action inputDel)
{
inpuDel();
}
Je peux appeler ci-dessus compte tenu de la méthode comme ceci:
ExpMethod(() => {/*do something that matters*/});
Tout fonctionne bien. So far So good. Maintenant, je veux avoir une méthode qui prend un générique Action
délégué comme un paramètre d'entrée comme ceci:
public void ExpGenMethod(Action<string,int> inputDel)
{
//I don't know how to call the supplied delegate as it requires parameters
}
Aussi, je suis en train d'appeler cette ExpGenMethod
de cette façon:
ExpGenMethod(("Hi",1) => {/*do something that makes sense*/});
Mais il montre les erreurs de syntaxe. S'il vous plaît laissez-moi savoir comment utiliser l'action générique délégué dans ce cas?
- Si l'appelant est la fourniture de "entrée", l'entrée devrait être absorbée dans le corps de la lambda, pas en tant que paramètres - si votre méthode doit encore travailler et
"Hi"
et1
ne serait pas sur la gauche de la=>
. - Quelle est l'erreur que vous obtenez? S'il vous plaît montrer le message exact.
Vous devez vous connecter pour publier un commentaire.
Le point de l'ensemble d'un délégué est d'avoir un pointeur sur une méthode. Passage de paramètres à tout son être déclaré est donc inutile. Au lieu de passer les arguments en faveur de votre délégué au sein de la méthode que exécute le délégué, dans votre cas dans
ExpGenMethod
:Que vous devriez faire ceci à la place:
Et de l'appeler comme ceci:
Lors de l'exécution de ce délégué
x
évalue à"Hi"
ety
à1
."Hi", 1
toujours ?(a,b) => {/*do something that matters*/}
signifie que a et b sont des paramètres qui vont être spécifié lors de l'appel. Ici, vous êtes à l'aide de la constante de sorte que vous devriez faire quelque chose comme() => { use "Hi"; use 1;}
et qui vous obtenir de nouveau à votre premier exemple de travail.Si vous voulez passer des paramètres vous pouvez le faire de cette façon: