Comme ceci:
Dictionary<int, Func<string, bool>>
Cela vous permet de stocker des fonctions qui prennent une chaîne en paramètre et retourne un booléen.
dico[5] = foo => foo == "Bar";
Ou si la fonction n'est pas anonyme:
dico[5] = Foo;
où Foo est définie comme ceci:
public bool Foo(string bar)
{
...
}
Mise à JOUR:
Après avoir vu votre mise à jour, il semble que vous ne savez pas à l'avance à la signature de la fonction que vous souhaitez appeler. Dans .NET pour invoquer une fonction, vous devez passer tous les arguments et si vous ne savez pas ce que les arguments vont être la seule façon d'y parvenir est par le biais de la réflexion.
Et voici une autre alternative:
class Program
{
static void Main()
{
// store
var dico = new Dictionary<int, Delegate>();
dico[1] = new Func<int, int, int>(Func1);
dico[2] = new Func<int, int, int, int>(Func2);
// and later invoke
var res = dico[1].DynamicInvoke(1, 2);
Console.WriteLine(res);
var res2 = dico[2].DynamicInvoke(1, 2, 3);
Console.WriteLine(res2);
}
public static int Func1(int arg1, int arg2)
{
return arg1 + arg2;
}
public static int Func2(int arg1, int arg2, int arg3)
{
return arg1 + arg2 + arg3;
}
}
Avec cette approche, vous avez encore besoin de connaître le nombre et le type de paramètres qui doivent être transmis pour chaque fonction à l'index correspondant du dictionnaire ou vous obtiendrez une erreur d'exécution. Et si vos fonctions n'ont pas de valeurs de retour d'utilisation System.Action<>
au lieu de System.Func<>
.