Frage

Ist es möglich, optionale Parameter in Methoden declarate?

In delphi, zum Beispiel, kann ich so etwas tun:

procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)

Wenn ich diese Funktion aufrufen, kann ich es nennen mit vier Parametern oder mit zwei Parametern:

Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;

Wie ist das möglich in C #?

War es hilfreich?

Lösung

Ich fürchte, dies jedoch in C # 1 bis 3 nicht möglich ist, ist die gute Nachricht, weil es ein viel gefragtes Detail gewesen ist (obwohl es sicherlich einige, die lieber sehen es nicht), Microsoft endlich beschlossen, es zu C # 4 hinzuzufügen.

Die C # 4 Syntax lautet wie folgt:

public static void SayHello(string s = "Hello World!")
{
    Console.WriteLine(s);
}

Verbrauch:

SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."

(Das letzte Beispiel verwendet ein benanntes Argument, das ist wirklich nicht notwendig, in diesem Fall ist, sondern hilft, wenn Sie mehr optionalen Parameter haben.)

Sie können mehr über dieses Thema auf dieses Blog-Post .

Andere Tipps

Sie können die variablen Argumente verwenden

Verwenden Sie das Schlüsselwort params.

void paramsExample(params int[] argsRest)
{

 if(argsRest.Length == 2) then...
 else if(argsRest.Length == 4) then...
 else error...

}
using System;
using System.Runtime.InteropServices;

   public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
   {
      Console.WriteLine(s);
   }

Fertig! :)

Sie können das noch nicht tun. Ich denke, es ist ein Eigenschaft von C # 4.0 .

Sie können rund um params als Arbeit verwenden, aber das kann nur sequentiell verwendet werden, nicht die Art und Weise einige Sprachen Standardparameter zu behandeln.

Sie verwenden Überlastungen wie diese

Test(int p1, int p2)
Test(int p1, int p2, int p3)

Sie können haben sie eine private Methode wie folgt aufrufen

Test(int[] ps)

und dann die Daten verarbeiten.

Eine andere Möglichkeit, dies zu umgehen ist nicht Überlastungen / optionale Parameter zu verwenden und stattdessen die Methoden benennen nach dem, was sie sind ment zu tun - es wie ein schlechter Kompromiss erscheinen mag, aber Ihr Code wird wahrscheinlich einfacher bekommen zu lesen <. / p>

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top