2013-02-28 54 views
5

Tôi đã nhìn thấy thông số params nhiều lần hơn tôi có thể nói và luôn xóa thông số đó mà không suy nghĩ về ý nghĩa của nó. Bây giờ tôi đã học được mục đích của nó. Những gì tôi vừa học được là tham số params phải là thông số cuối cùng trong danh sách tham số. Nhưng đây là những gì tôi đã học về các tham số có giá trị mặc định được chỉ định. Ví dụ:params Tham số với giá trị tham số mặc định

MyMethod(string Name, int blah=0). 

Vì vậy, câu hỏi là nếu tôi cần phải xác định một giá trị mặc định như trên khi cần phải sử dụng params, điều này có thể được thực hiện? Nếu vậy, phải được khai báo cuối cùng? Ví dụ:

MyMethod(int blah=0, params string[] variableData). 

Cảm ơn sự giúp đỡ của bạn một lần nữa. James

+0

Tại sao không thử nó? –

+0

http://stackoverflow.com/questions/3948971/c-sharp-4-0-optional-parameters-and-params-do-not-work-together – Guy

+0

tôi nghĩ rằng nó hoàn toàn tất cả các quyền để làm this.did bạn thử nó. –

Trả lời

3

dụ của bạn là chính xác:

public void TestMethod(string name = "asdasd", params int[] items) 
{ 
} 

params phải là cuối cùng, không có vấn đề gì tham số được sử dụng trước đó.

+0

Xin chào MarinJuraszek. Cảm ơn sự đơn giản của câu trả lời của bạn. Tôi vừa có một chiếc laptop mới vào tối qua và cuối cùng cũng có thể kiểm tra các kịch bản của tôi để xem kết quả. Tôi thấy bạn hoàn toàn đúng! – iDevJunkie

4

Vâng, params là một trường hợp đặc biệt ở đây - họ là những tình huống duy nhất mà một tham số mà không một giá trị mặc định có thể đến sau một với một giá trị mặc định.

Tuy nhiên, bạn không thể sau đó gọi phương thức và tận dụng lợi thế của params bên thứ (cho một mảng không có sản phẩm nào) mà không có cũng xác định tham số tùy chọn:

MyMethod(5, "x", "y");       // Fine, no defaulting 
MyMethod(variableData: new string[] { "x", "y"}); // Default for blah 
MyMethod();          // Default for blah, empty variableData 
MyMethod(new string[] { "x, "y" });    // Invalid 
MyMethod("x", "y");        // Invalid 
+0

Thực tế thú vị: khi bạn thêm các giá trị tham số mặc định và biên dịch lại, trình biên dịch sẽ đi vòng và chèn các tham số mặc định đó vào các cuộc gọi đến phương thức của bạn - nhận thấy điều đó một cách khó khăn. – JerKimball

+0

@JerKimball: Vâng, đúng vậy. Đó là cách các tham số mặc định hoạt động - chúng được đưa vào trang cuộc gọi. –

Các vấn đề liên quan