Wie Sie optionale Parameter übergeben, um eine Methode in C#?
Wie optionale Parameter übergeben, um eine Methode in C# ?
Nehme an, dass ich erstellt eine Methode namens Sendcommand
public void SendCommand(String command,string strfilename)
{
if (command == "NLST *" ) //Listing Files from Server.
{
//code
}
else if (command == "STOR " + Path.GetFileName(uploadfilename)) //Uploading file to Server
{
//code
}
else if ...
}
Nun will ich diese Methode aufrufen in der main-Methode wie
Sendcommand("STOR ", filename);
Sendcommand("LIST"); //In this case i dont want to pass the second parameter
Wie zu erreichen?
- mögliche Duplikate von Wie können Sie optionale Parameter in C#?
- Bitte siehe meine Antwort: nicht nur eine einzige Methode, verwenden Sie eine Methode, die pro Befehl oder eine separate command-Klasse für jeden Befehl
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie das Parameter-Attribut:
dann können Sie es so nennen:
ist oder wenn Sie mit C# 4.0 können Sie mit der neuen optionalen Argumente feature:
Pre .NET 4, die Sie brauchen, um eine überlastung der Methode:
.NET-4 bietet Unterstützung für Standard-Parameter, die Ihnen erlauben, um all dies zu tun in einer Zeile.
Durch die Art und Weise, in der Frage, wie Sie geschrieben haben Sie nicht den Aufruf der Methode in deinem ersten Beispiel:
ist immer noch mit einem einzigen parameter, der die Verkettung der beiden strings.
Die offensichtliche Antwort für diese sein sollte, tun Sie es nicht, die Art und Weise.
Sollten Sie entweder eine separate Methode für jeden Befehl oder einen Befehl Basisklasse und einer separaten Klasse abgeleitete Klasse für die einzelnen Befehle mit der Execute-Methode.
Es ist schlechtes design haben eine Methode, mit der Sie jeden erdenklichen Befehl.
Sie wirklich nicht wollen, eine
Sendcommand()
zu behandeln jeden möglichen Befehl.Überprüfen C# 4.0 Optionale Parameter.
Auch sicherstellen, dass Sie verwenden .NET 4.
Wenn Sie brauchen, um mit älteren Versionen .NET.
Methode überladen ist die Lösung :
Leute,
Ich war auf der Suche auf diesen thread, der versucht, ein problem zu lösen, die nicht wirklich existieren, da C# "einfach durchläuft" ein params-array! Was ich nicht wusste bis ich habe es gerade ausprobiert.
Hier ist ein SSCCE:
Produziert:
Süß!
Aber warum? ... Gut, weil (natürlich) der nächste parameter passend zu der stark überladenen Konsole.WriteLine-Methode ist
(string format, params object[] arg)
... nicht(string format, object arg)
als ich dachte.Ich sozusagen wusste, das musste doch möglich sein, irgendwie, weil (ich vermute) Konsole.WriteLine tut es, nur ich irgendwie erwartet, dass es SCHWER sein muss... und denke daher, dass die Einfachheit und die "Nettigkeit" dieser trick-der-die-Sprache ist beachtenswert.
Cheers. Keith.
PS: ich Frage mich, ob VB.NET verhält sich das genauso? Ich nehme an, es muss.
Gibt es drei einfache Lösungen für diese ein:
Erstellen Sie eine andere Methode, die fordert, die erste?
Überlast die Funktion. eher als Prüfung für die bedingte Verzweigung. So etwas wie dieses:
Können Sie dies tun, in ein paar Möglichkeiten. Wenn Sie verwenden .NET 4.0 verwenden, können Sie optional Parameter für die Methode:
Sonst, können Sie einfach erstellen Sie eine andere Methode, die die Methode aufruft, die Sie bereits haben, sondern übergeben die Standard-Parameter, die Sie wollen, werden optional:
Optionale Parameter feature-kommen in c# 4.0 hier ist der link. Ansonsten musst du schreiben überladene Funktion.
Alle Antworten auf dieser Seite sind gültige Wege zu akzeptieren optionale Parameter, aber in vielen Fällen ist dies ein Zeichen, dass Ihre Methode versucht, zu viel zu tun.
In vielen Fällen werden Sie besser dran mit den folgenden eindeutigen Methoden...
Können Sie params-Schlüsselwort :
und Sie können es verwenden, wie :