Paramètres nommés / facultatifs dans C # 3.0?
Question
Existe-t-il un moyen d’ajouter des paramètres facultatifs à C # 3.0 comme dans C # 4.0? Je dois avoir cette fonctionnalité, je ne peux pas attendre!
Modifier:
Si vous connaissez un moyen de contourner le problème / un hack pour le faire, postez-le également. Merci!
La solution
Vous pouvez utiliser un type anonyme et une réflexion comme solution de contournement aux paramètres nommés:
public void Foo<T>(T parameters)
{
var dict = typeof(T).GetProperties()
.ToDictionary(p => p.Name,
p => p.GetValue(parameters, null));
if (dict.ContainsKey("Message"))
{
Console.WriteLine(dict["Message"]);
}
}
Je peux maintenant appeler Foo comme ceci:
Foo(new { Message = "Hello World" });
... et il écrira mon message.
En gros, j'extrais toutes les propriétés du type anonyme qui a été passé et je les convertis en dictionnaire de chaîne et d'objet (le nom de la propriété et sa valeur).
Autres conseils
Il y a toujours une surcharge de la méthode. :)
Malheureusement non. Vous aurez besoin du compilateur C # 4.0 pour supporter cela. Si vous voulez aujourd'hui des paramètres facultatifs sur la plate-forme .NET, vous pouvez essayer VB .NET ou F #.
Comme Dustin l’a dit, les paramètres optionnels arrivent en C # 4.0. Un type de méthode peu fiable pour simuler des paramètres facultatifs serait d’avoir un objet [] (ou un tableau plus typé) comme dernier argument.
On pourrait aussi utiliser des arguments variables comme paramètres d’option. String.Format () est un exemple de la façon dont cela fonctionne.
Voir ici:
http://blogs.msdn.com/csharpfaq /archive/2004/05/13/131493.aspx