590 Stimmen

Wie können Sie optionale Parameter in C# verwenden?

Nota: Diese Frage wurde zu einer Zeit gestellt, als C# noch keine optionalen Parameter unterstützte (d.h. vor C# 4).

Wir erstellen eine Web-API, die programmatisch aus einer C#-Klasse generiert wird. Die Klasse hat die Methode GetFooBar(int a, int b) und die API hat eine Methode GetFooBar mit Abfrageparametern wie &a=foo &b=bar .

Die Klassen müssen optionale Parameter unterstützen, was in der Sprache C# nicht unterstützt wird. Was ist der beste Ansatz?

3voto

cfbarbero Punkte 1587

Die typische Art und Weise dies in C# behandelt wird, wie Stephen erwähnt ist, um die Methode zu überladen. Durch die Erstellung mehrerer Versionen der Methode mit unterschiedlichen Parametern schaffen Sie optionale Parameter. In den Formularen mit weniger Parametern würden Sie typischerweise das Formular der Methode mit allen Parametern aufrufen, die Ihre Standardwerte beim Aufruf dieser Methode festlegen.

3voto

Verwendung von Überladungen oder von C# 4.0 oder höher

 private void GetVal(string sName, int sRoll)
 {
   if (sRoll > 0)
   {
    // do some work
   }
 }

 private void GetVal(string sName)
 {
    GetVal("testing", 0);
 }

2voto

Sean Franklin Punkte 11

Sie können Standard verwenden.

public void OptionalParameters(int requerid, int optinal = default){}

2voto

user2933082 Punkte 263

Sie können Ihre Methode überladen. Eine Methode enthält einen Parameter GetFooBar(int a) und die anderen enthalten beide Parameter, GetFooBar(int a, int b)

1voto

Ryan Punkte 11

Bei einer größeren Anzahl von optionalen Parametern wird ein einzelner Parameter von Dictionary<string,Object> könnte mit dem ContainsKey Methode. Ich mag diesen Ansatz, weil er mir erlaubt, eine List<T> oder eine T einzeln zu verwenden, ohne eine weitere Methode erstellen zu müssen (gut, wenn z. B. Parameter als Filter verwendet werden sollen).

Beispiel ( new Dictionary<string,Object>() übergeben werden, wenn keine optionalen Parameter gewünscht sind):

public bool Method(string ParamA, Dictionary<string,Object> AddlParams) {
    if(ParamA == "Alpha" && (AddlParams.ContainsKey("foo") || AddlParams.ContainsKey("bar"))) {
        return true;
    } else {
        return false;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X