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)
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)
Antworten:
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.)
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);