2011-11-23 5 views
-1

Je veux savoir s'il existe un moyen de passer une fonction à une autre fonction pour gérer son try/catch. Je travaille sur une base de code existante qui n'a aucune gestion d'exception.Comment passer une fonction en paramètre?

+0

Je pense que cette question réponse se trouve le long des lignes de [Programmation Orientée Aspect] (http://en.wikipedia.org/wiki/Aspect-oriented_programming). Jetez un oeil un [PostSharp] (http://www.sharpcrafters.com/). – Ahmad

Répondre

2

NOTE: Cette réponse porte sur le texte de la question plutôt que le titre, car le problème ne semble pas faire avec des fonctions de passage en tant que paramètres.

Il est un peu difficile de savoir exactement ce que vous essayez de faire, mais vous pouvez certainement invoquer des méthodes publiques dans votre propre bloc try…catch. Ce que vous ne pouvez pas faire * est d'ajouter une gestion des erreurs aux appels existants vers cette fonction.

Vous pouvez à la place ajouter une gestion d'erreur de haut niveau qui vous donnera au moins l'opportunité de consigner les exceptions et de montrer aux utilisateurs une expérience d'échec plus gracieuse.

* pas raisonnablement

+0

Fantastique texte d'exception, monsieur. A +. –

0

Regardez dans Actions. Ils vous permettront de passer une méthode anonyme en paramètre.

Cependant, je ne pense pas que cela puisse vous aider avec votre problème. Vous allez probablement vouloir refactoriser la base de code pour avoir une gestion correcte des exceptions.

0

Vous pouvez utiliser Lambda Expression

class Program 
{ 
private static int Sum(int a, int b) 
{ 
    return a + b; 
} 

private static int Multiply(int a, int b) 
{ 
    return a * b; 
} 


private static int GetResult(Func<int, int, int> solver, int a, int b) 
{ 
    try { 
     return solver(a, b); 
    } catch { 
    } 
    return 0; // your default return 
} 

static void Main(string[] args) 
{ 
    var a = 2; 
    var b = 3; 

    var sum = GetResult(Sum, a, b); 
    var multiply = GetResult(Multiply, a, b); 
} 

Plus d'informations sur

Lambda Expressions (Guide de programmation C#)

http://msdn.microsoft.com/en-us/library/bb397687.aspx

délégué Func

http://msdn.microsoft.com/en-us/library/bb549151.aspx

Questions connexes