2009-03-16 14 views
2

avec paramètres PHP en option, si vous n'envoyez pas un paramètre, il est assigné à une valeur par défaut:Y a-t-il des paramètres optionnels de type PHP en C#?

public function getCustomer(id, optionalMessage = "(no message)") { 
    ... 
} 

en C# je résous généralement cela avec méthode C# surcharge, par exemple:

public void GetCustomer(int id) 
{ 
    ... 
} 

public void GetCustomer(int id, string optionalMessage) 
{ 
    ... 
} 

mais je manque la variante PHP pragmatique, ne C# ont aussi une syntaxe mielleux faire des paramètres facultatifs ainsi, comme dans l'exemple PHP?

Répondre

8

Non en C# 3.0; cette fonctionnalité est sur la feuille pour C# 4.0 - voir here.

Pour l'instant, vous devrez utiliser différentes: les surcharges

public void Foo(int a) {Foo(a, "");} 
public void Foo(int a, string b) {...} 

La syntaxe proposée serait la suivante:

public void Foo(int a, string b = "") {...} 

appelé avec l'une des:

Foo(123); // use default b 
Foo(123, "abc"); // optional by position 
Foo(123, b: "abc"); // optional by name 
+0

votre blog a souligné la raison pour laquelle j'ai demandé: je voyais le presque résolu avec des paramètres nommés (par exemple dans les attributs personnalisés) mais il n'était pas 100% là (comme vous le suggérez il doit y avoir des setters), gentil , Merci –

4

Non, mais vous pouvez les simuler dans une certaine mesure, en particulier si vos paramètres optionnels sont du même type (ou si cela ne vous dérange pas e casting).

Vous pouvez utiliser l'indicateur params.

void paramsExample(object arg1, object arg2, params object[] argsRest) 

Je devrais préciser cependant, ceci perd la sécurité de type, et il n'y a aucune application de type des paramètres ou de l'ordre.