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!

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top