Je souhaite appeler une méthode basée sur une valeur dans une table de recherche. Les valeurs seront recherchées dans une base de données et seront itérées à travers. Ce que je suis en train d'éviter est la suivante:Fonction d'exécution basée sur des données dans une table de recherche
foreach (Row r in rows)
{
if (r["command"] == "Command1")
MyClass.Command1();
else if (r["command"] == "Comman2")
MyClass.Command2();
else if (r["command"] == "Comman3")
MyClass.Command3();
}
Ce code est l'héritage que je dois soutenir, mais je sais qu'il ya sûrement une meilleure façon de le faire. Actuellement, le code ressemble à ce qui précède mais je cherche une solution plus élégante.
EDIT:
Sur la base des suggestions ci-dessous, je suis en train de faire quelque chose comme ceci:
static void Main(string[] args)
{
Dictionary<string, Action<MyClass>> myActions = new Dictionary<string,Action<MyClass>>();
myActions.Add("Command1",MyClass.DoCommand1("message1"));
myActions.Add("Command2",MyClass.DoCommand1("message2"));
myActions["Command1"]();
}
avec mon fichier de classe qui ressemble à ceci:
public class MyClass
{
public void DoCommand1(string message)
{
Console.WriteLine(message);
}
public void DoCommand2(string message)
{
Console.WriteLine(message);
}
}
Cependant, je Je reçois des erreurs de syntaxe indiquant qu'une référence d'objet est requise pour le fichier, la méthode ou la propriété non statique MyClass.DoCommand1 (chaîne). Des idées?
Veuillez noter que j'utilise le framework .NET 2.0.
J'aime cette solution beaucoup, mais je ne sais pas comment déclarer les délégués au sein de la classe. Pouvez-vous expliquer cela? –
Le type de délégué est Action, il suffit de déclarer un Dictionary et de le remplir, avec YourClass.MethodName, vous ne devriez pas avoir besoin de faire l'instanciation de délégué, le compilateur devrait prendre soin de cela. –
albertein
Pouvez-vous jeter un oeil à mon édition ci-dessus, et laissez-moi savoir où je vais mal? J'utilise le framework .NET 2.0, et je ne crois pas que Action arrive jusqu'au 3.0. –