Hello Ed,
Très bonne remarque !
Alors pour ton info, dans la prochaine version de la lib Constellation il y a des nouveautés à ce sujet justement !
On sera capable d’utiliser les paramètres optionnels C# dans les MC.
On gros on pourra écrire ce genre de chose :
[MessageCallback()]
void TestMultiOptionals(string input, string demo = "seb", int a = 42)
{
PackageHost.WriteInfo("input = " + input);
PackageHost.WriteInfo("demo = " + demo);
PackageHost.WriteInfo("a = " + a);
}
[MessageCallback()]
void TestOptional1param(string demo = "seb")
{
PackageHost.WriteInfo("input = " + demo);
}
[MessageCallback()]
void TestOptional1ParamComplex(Papa papa = null)
{
PackageHost.WriteInfo("Avce optionnal un param object = " + (papa?.MyProperty.ToString() ?? "vide"));
}
[MessageCallback()]
void TestOptional2Params(Papa papa, int a = 123)
{
PackageHost.WriteInfo($"a= {a} Avce optionnal un param object = " + (papa?.MyProperty.ToString() ?? "vide"))
}
A noter que sur les types complexes, pas besoin de mettre la valeur optionnelle à nulle, elle est par défaut à nulle !
Bon maintenant cette évolution est dispo à partir de la lib 1.8.0.16159 qui est pas encore sortie Elle sera livrée avec la release 1.8.1 je pense qui comprendra entre autre une grosse évolution de la console (fin Juin, début Juillet au plus tard).
Donc en attendant tu as aussi un autre moyen c’est d’utiliser un seul paramètre qui est une classe contenant des propriétés.
Par exemple, imagines le MC suivant :
[MessageCallback]
public void SendMail(SendMailRequest request)
{
PackageHost.WriteInfo("SendMail {0} {1} {2} {3}", request.mMailInfo.From, request.Subject, request.HTMLBody);
}
Avec la ou les classes :
public class SendMailRequest
{
public MailInfo mMailInfo { get; set; }
public string Subject { get; set; }
public string HTMLBody { get; set; }
}
public class MailInfo
{
public string From { get; set; }
public string FromName { get; set; }
public string[] To { get; set; }
public string[] ToName { get; set; }
}
Ainsi dans ton code tu peux facilement savoir si les propriétés sont vides ou non. Il n’y a pas de valeur “par defaut” comme on l’aurait de manière implicite avec les params optionnels de C# mais tu peux facilement savoir si les valeurs sont la ou pas !
A+