Gibt es eine C # -Alternative zu Javas Vararg-Parametern?


92

Ich habe an Java gearbeitet und bin neu in der .Net-Technologie

Ist es möglich, eine Funktion in C # zu deklarieren, die variable Eingabeparameter akzeptiert?

Gibt es eine C # -Syntax, die der folgenden Java-Syntax ähnelt?

void f1(String... a)

2
Wenn eine der folgenden Antworten Ihre Frage so beantwortet , wie der Stapelüberlauf funktioniert, würden Sie die Antwort "akzeptieren", indem Sie auf das Häkchen daneben klicken. Details hier .
TJ Crowder

Antworten:


145

Ja, C # entspricht den varargs-Parametern. Sie werden Parameter-Arrays genannt und mit dem paramsModifikator eingeführt:

public void Foo(int x, params string[] values)

Dann nenne es mit:

Foo(10, "hello", "there");

Genau wie bei Java ist es nur der letzte Parameter, der so variieren kann. Beachten Sie, dass (wie bei Java) ein Parameter von params object[] objectsleicht zu Verwirrung führen kann, da Sie sich daran erinnern müssen, ob ein einzelnes Argument vom Typ object[]erneut umbrochen werden soll oder nicht. Ebenso müssen Sie sich für jeden nullbaren Typ merken, ob ein einzelnes Argument von nullals Array-Referenz oder als einzelnes Array-Element behandelt wird. (Ich denke, der Compiler erstellt das Array nur, wenn es muss, aber ich neige dazu, Code zu schreiben, wodurch ich mich nicht daran erinnern muss.)


+1, obwohl ich das erwähnen würde (wie bei so ziemlich jedem anderen Sprachfeature), sollte dies nicht missbraucht werden.
Federico Berasategui

15
@ HighCore: Wenn Sie es über so ziemlich jede andere Sprachfunktion erwähnen wollen, ist es wahrscheinlich nicht erwähnenswert :)
Jon Skeet

2
@hvd: Da das OP ein Anfänger zu sein scheint, möchte ich hier lieber nicht auf benannte Argumente, optionale Parameter usw. eingehen. Ich sehe den Punkt, den Sie ansprechen wollen, aber ich denke, es würde im Moment mehr Verwirrung als Licht bringen.
Jon Skeet

37

Schauen Sie sich die Parameter an (C # -Referenz)

Mit dem Schlüsselwort params können Sie einen Methodenparameter angeben, der eine variable Anzahl von Argumenten akzeptiert.

Sie können eine durch Kommas getrennte Liste von Argumenten des in der Parameterdeklaration angegebenen Typs oder ein Array von Argumenten des angegebenen Typs senden. Sie können auch keine Argumente senden.

Nach dem Schlüsselwort params in einer Methodendeklaration sind keine zusätzlichen Parameter zulässig, und in einer Methodendeklaration ist nur ein Schlüsselwort params zulässig.

Wie im Beispiel gezeigt, wird die Methode als deklariert

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

und verwendet als

UseParams(1, 2, 3, 4);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.