Pracowałem nad Javą i nowością w technologii .Net
Czy można zadeklarować w C # funkcję, która akceptuje zmienne parametry wejściowe
Czy istnieje składnia języka C # podobna do następującej składni języka Java?
void f1(String... a)
Pracowałem nad Javą i nowością w technologii .Net
Czy można zadeklarować w C # funkcję, która akceptuje zmienne parametry wejściowe
Czy istnieje składnia języka C # podobna do następującej składni języka Java?
void f1(String... a)
Odpowiedzi:
Tak, C # ma odpowiednik parametrów varargs. Nazywa się je tablicami parametrów i wprowadza paramsmodyfikator:
public void Foo(int x, params string[] values)
Następnie zadzwoń za pomocą:
Foo(10, "hello", "there");
Podobnie jak w przypadku Javy, jest to tylko ostatni parametr, który może się tak zmieniać. Zauważ, że (podobnie jak w Javie) parametr of params object[] objectsmoże łatwo spowodować zamieszanie, ponieważ musisz pamiętać, czy pojedynczy argument typu object[]ma być ponownie opakowany, czy nie. Podobnie w przypadku każdego typu dopuszczającego wartość null, należy pamiętać, czy pojedynczy argument nullbędzie traktowany jako odwołanie do tablicy, czy jako pojedynczy element tablicy. (Myślę, że kompilator tworzy tablicę tylko wtedy, gdy jest to konieczne, ale mam tendencję do pisania kodu, dzięki czemu nie muszę o tym pamiętać).
Spójrz na parametry (odwołanie w C #)
Słowo kluczowe params pozwala określić parametr metody, który przyjmuje zmienną liczbę argumentów.
Możesz wysłać rozdzieloną przecinkami listę argumentów typu określonego w deklaracji parametru lub tablicę argumentów określonego typu. Nie możesz też wysyłać żadnych argumentów.
Żadne dodatkowe parametry nie są dozwolone po słowie kluczowym params w deklaracji metody, aw deklaracji metody dozwolone jest tylko jedno słowo kluczowe params.
Jak pokazano w przykładzie, metoda jest zadeklarowana jako
public static void UseParams(params int[] list)
{
for (int i = 0; i < list.Length; i++)
{
Console.Write(list[i] + " ");
}
Console.WriteLine();
}
i używany jako
UseParams(1, 2, 3, 4);