2012-09-26 71 views
9

Trong C# nó có thể sử dụng các giá trị tham số mặc định trong một phương pháp, trong ví dụ:Phương pháp giá trị mặc định mảng tham số

public void SomeMethod(String someString = "string value") 
{ 
    Debug.WriteLine(someString); 
} 

Nhưng bây giờ tôi muốn sử dụng một mảng làm tham số trong phương pháp, và thiết lập một giá trị mặc định cho nó.
Tôi đã suy nghĩ nó sẽ giống như thế này:

public void SomeMethod(String[] arrayString = {"value 1", "value 2", "value 3"}) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 

Nhưng điều này không làm việc.
Có cách nào chính xác để thực hiện việc này không, liệu điều này có thể thực hiện được không?

+0

Xác định "không hoạt động". – Tudor

+0

Có một giải pháp thay thế cho các loại tham chiếu. Đặt đối số mặc định thành "null". Sau đó, bên trong kiểm tra khối mã nếu tham số được đặt thành null, nếu nó được đặt giá trị mặc định cho tham số kiểu tham chiếu. –

Trả lời

15

Có cách nào chính xác để làm điều này không, nếu điều này thậm chí có thể xảy ra?

này là không thể (trực tiếp) làm giá trị mặc định phải là một trong những (từ Optional Arguments) sau:

  • một biểu thức hằng;
  • một biểu thức của biểu mẫu mới ValType(), trong đó ValType là một loại giá trị, chẳng hạn như một enum hoặc một cấu trúc;
  • một biểu thức mặc định biểu mẫu (ValType), trong đó ValType là một loại giá trị.

Tạo mảng không phù hợp với bất kỳ giá trị mặc định nào có thể cho các đối số tùy chọn.

Các lựa chọn tốt nhất ở đây là để thực hiện một tình trạng quá tải:

public void SomeMethod() 
{ 
    SomeMethod(new[] {"value 1", "value 2", "value 3"}); 
} 


public void SomeMethod(String[] arrayString) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
+0

Ok, cảm ơn. Tôi sẽ đi đây. Tôi sẽ chấp nhận câu trả lời này trong khoảng 11 phút. –

10

Hãy thử điều này:

public void SomeMethod(String[] arrayString = null) 
{ 
    arrayString = arrayString ?? {"value 1", "value 2", "value 3"}; 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
someMethod(); 
+0

Cảm ơn bạn đã nhập. Nó có vẻ như là một cách tốt để đi, tuy nhiên tôi sẽ gắn bó với câu trả lời của Reed về điều này bởi vì nó có ích trong một số cách khác cũng như đối với tôi. –

+3

+1 Đây là một cách tiếp cận khéo léo, nhưng nó không cung cấp cho bạn một cách để phân biệt giữa một người dùng đi qua null * một cách rõ ràng * và không sử dụng tham số (đó là lý do tại sao tôi thường thích cách tiếp cận quá tải). Điều đó có thể hoặc có thể không quan trọng trong trường hợp này. –

+0

Bạn được chào đón. – Nathan

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