Wie übergeben Sie optionale Parameter an eine Methode in C #?

7

Wie übergeben Sie optionale Parameter an eine Methode in C #?

Angenommen, ich habe eine Methode namens Sendcommand

erstellt %Vor%

Nun möchte ich diese Methode in der Hauptmethode wie

aufrufen %Vor%

Wie erreiche ich das?

    
Swapnil Gupta 29.07.2010, 08:43
quelle

12 Antworten

10

Verwenden Sie das Attribut params:

%Vor%

Dann kannst du es so nennen:

%Vor%

oder wenn Sie C # 4.0 verwenden, können Sie die neue optionale Argumentfunktion verwenden:

%Vor%     
codymanix 29.07.2010, 08:50
quelle
15

Vor .NET 4 müssen Sie die Methode überladen:

%Vor%

Mit .NET 4 wird die Unterstützung für Standardparameter eingeführt, mit denen Sie alles in einer einzigen Zeile ausführen können.

%Vor%

Übrigens, in der Frage, wie Sie es geschrieben haben, rufen Sie auch nicht die Methode in Ihrem ersten Beispiel auf:

%Vor%

verwendet immer noch einen einzelnen Parameter, der die Verkettung der beiden Strings darstellt.

    
Martin Harris 29.07.2010 08:47
quelle
2

Die offensichtliche Antwort dafür sollte sein, tu es nicht so .

Sie sollten entweder eine separate Methode für jeden Befehl oder eine Befehls-Basisklasse und eine separate abgeleitete Klasse für jeden Befehl mit einer Execute-Methode haben.

Es ist ein schlechter Entwurf, eine Methode zu haben, die alle erdenklichen Befehle beherrscht.

Sie wollen wirklich nicht, dass ein Sendcommand() alle möglichen Befehle behandelt.

    
Kieren Johnstone 29.07.2010 08:56
quelle
1

Überprüfen Sie optionale C # 4.0-Parameter .

Stellen Sie außerdem sicher, dass Sie .NET 4 verwenden.

Wenn Sie ältere Versionen von .NET verwenden müssen.

Überladen der Methode ist die Lösung:

%Vor%     
Incognito 29.07.2010 08:52
quelle
1

Leute,

Ich habe mir diesen Thread angesehen und versucht, ein Problem zu lösen, das eigentlich nicht existiert, weil C # ein Paramsen-Array "gerade durchläuft"! Was ich nicht wusste, bis ich es gerade probiert habe.

Hier ist ein SSCCE:

%Vor%

Produziert:

%Vor%

Süß!

Aber warum? ... Nun, weil (natürlich) die engste Parameterübereinstimmung mit der stark überladenen Console.WriteLine-Methode (string format, params object[] arg) ... nicht (string format, object arg) ist, wie ich dachte.

Ich wusste irgendwie, dass das irgendwie möglich sein muss, weil (ich nehme an) Console.WriteLine tut es, ich habe irgendwie erwartet, dass es hart ist ... und denke daher, dass die Einfachheit und "Nettigkeit" dieses Tricks ist -der-Sprache ist bemerkenswert.

%Vor%

Prost. Keith.

PS: Ich frage mich, ob sich VB.NET genauso verhält? Ich nehme an, es muss.

    
corlettk 25.09.2012 23:05
quelle
0

Es gibt drei einfache Lösungen für diesen:

  1. Überladen Sie die Methode
  2. Erlaube der Methode, 'null' zu akzeptieren und handle entsprechend
  3. Verwenden Sie .NET 4, das optionale Parameter
  4. ermöglicht
Flynn1179 29.07.2010 08:47
quelle
0

Erstellen Sie eine andere Methode, die die erste aufruft?

%Vor%     
Arcturus 29.07.2010 08:48
quelle
0

Überladen Sie die Funktion. anstatt nach bedingter Verzweigung zu suchen. Etwas wie das:

%Vor%     
loxxy 29.07.2010 08:49
quelle
0

Sie können dies auf verschiedene Arten tun. Wenn Sie .NET 4.0 verwenden, können Sie optionale Parameter für die Methode verwenden:

%Vor%

Andernfalls können Sie einfach eine andere Methode erstellen, die die Methode aufruft, die Sie bereits haben, aber die Standardparameter übergeben, die Sie optional haben möchten:

%Vor%     
Jonathon Bolster 29.07.2010 08:50
quelle
0

Optionale Parameter sind in c # 4.0 hier verfügbar der Link. Ansonsten muss man überladene Funktion schreiben.

    
Siddiqui 29.07.2010 08:52
quelle
0

Alle Antworten auf dieser Seite sind gültige Möglichkeiten, optionale Parameter zu akzeptieren. In vielen Fällen ist dies jedoch ein Zeichen dafür, dass Ihre Methode zu viel versucht.

In vielen Fällen sind Sie mit den folgenden unzweideutigen Methoden vielleicht besser dran ...

%Vor%     
Fenton 29.07.2010 08:56
quelle
0

Sie können params Schlüsselwort verwenden:

%Vor%

und Sie können es wie folgt verwenden:

%Vor%     
Florian 29.07.2010 09:10
quelle