Có giải pháp thay thế C # cho các tham số vararg của Java không?


93

Tôi đã làm việc trên Java và mới sử dụng công nghệ .Net

Có thể khai báo một hàm trong C # chấp nhận các tham số đầu vào thay đổi không

Có cú pháp C # nào giống với cú pháp Java sau không?

void f1(String... a)

2
Nếu bất kỳ câu trả lời nào bên dưới trả lời cho câu hỏi của bạn, theo cách hoạt động của Stack Overflow, bạn "chấp nhận" câu trả lời bằng cách nhấp vào dấu kiểm bên cạnh nó; chi tiết tại đây .
— TJ Crowder

Câu trả lời:


150

Có, C # có tương đương với các tham số varargs. Chúng được gọi là mảng tham số và được giới thiệu với công cụ paramssửa đổi:

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

Sau đó gọi nó bằng:

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

Cũng như với Java, nó chỉ là tham số cuối cùng có thể thay đổi như thế này. Lưu ý rằng (như với Java) một tham số của params object[] objectscó thể dễ dàng gây ra nhầm lẫn, vì bạn cần nhớ rằng liệu một đối số duy nhất của kiểu object[]có được bao bọc lại hay không. Tương tự như vậy đối với bất kỳ kiểu nullable nào, bạn cần nhớ liệu một đối số duy nhất của nullsẽ được coi là tham chiếu mảng hay một phần tử mảng duy nhất. (Tôi nghĩ rằng trình biên dịch chỉ tạo mảng nếu nó phải, nhưng tôi có xu hướng viết mã để tránh việc tôi phải nhớ điều đó.)


+1, mặc dù tôi sẽ đề cập đến điều đó (như với khá nhiều tính năng ngôn ngữ khác), điều này không nên lạm dụng.
— Federico Berasategui

16
@HighCore: Nếu bạn đang đi để đề cập đến nó về khá nhiều bất kỳ tính năng ngôn ngữ khác, nó có thể là không đáng nhắc đến :)
— Jon Skeet

2
@hvd: Cho rằng OP có vẻ là người mới bắt đầu, tôi không muốn đi vào các đối số được đặt tên, các tham số tùy chọn, v.v. ở đây. Tôi thấy điểm mà bạn đang cố gắng đưa ra, nhưng tôi nghĩ nó sẽ gây ra nhiều sự nhầm lẫn hơn là ánh sáng vào lúc này.
— Jon Skeet

37

Hãy xem các thông số (Tham chiếu C #)

Từ khóa params cho phép bạn chỉ định một tham số phương thức có một số lượng đối số thay đổi.

Bạn có thể gửi danh sách các đối số được phân tách bằng dấu phẩy của kiểu được chỉ định trong khai báo tham số hoặc một mảng đối số của kiểu được chỉ định. Bạn cũng có thể không gửi đối số.

Không có tham số bổ sung nào được phép sau từ khóa params trong khai báo phương thức và chỉ một từ khóa params được phép trong khai báo phương thức.

Như được hiển thị trong ví dụ, phương thức được khai báo là

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

và được sử dụng như

UseParams(1, 2, 3, 4);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.