J'ai besoin de stocker le Parameter
retourné par Build()
en tant que ```Parameter (parce que je stocke les paramètres dans un tableau, l'autre façon est trop copiée-collée de la même classe pour chaque quantité de paramètres, puisque c# n'a pas de génériques variadiques).
Le problème est le cast `(Parameter) (object) (/* valeur de type Parameter */);, puisque
intn'est pas castable en
object`. Comment résoudre ce problème?
J'ai le monstre suivant (imaginez que T1
est int
) :
public static IEventBuilder<(IOrigin origin, T1 arg1, T2 arg2)>
Params(
this IEventBuilder<(IOrigin origin, string msg)> eventBuilder,
Func, IParameterBuilder> param1,
Func, IParameterBuilder> param2)
{
return new ParamsBuilder<(IOrigin, T1, T2)>(
eventBuilder,
(origin, objs) => (origin, (T1) objs[0], (T2) objs[1]), // ignorer cette ligne
(Parameter) (object) param1(new RootParameterBuilder()).Build(), // Build() renvoie Parameter (par exemple, int)
(Parameter) (object) param2(new RootParameterBuilder()).Build());
}
Pas vraiment important, mais au cas où vous auriez besoin d'un peu de contexte, voici un exemple d'utilisation de Params :
_dispatcher.On // IEventBuilder
.Chat() // IEventBuilder<(IOrigin, string)>
.Params( // IEventBuilder<(IOrigin, double)>
p => p // IParameterBuilder
.Transform(Convert.ToInt32) // IParameterBuilder
.Transform(i => i + 128.0)) // IParameterBuilder
.Invoke(t =>
{
// t is (IOrigin, double)
});`` ```