2012-10-05 23 views
11

Vì vậy, tôi thấy rằng có thể có chữ ký phương thức trong đó thông số đầu tiên cung cấp giá trị mặc định và tham số thứ hai là tập hợp thông số.Đối số tùy chọn theo sau là Params

Điều tôi không thể thấy là cách để thực sự sử dụng giá trị mặc định của đối số đầu tiên.

Có thể không?

phương pháp Ví ​​dụ:

void WaitAllTasks(string message = "Running Task.WaitAll", params Task[] tasks);

ban đầu tôi cố gắng bỏ qua tham số tin nhắn khi gọi phương pháp này và cũng đã cố gắng sử dụng tên thông số, mà không làm việc với params.

Nó biên dịch, nhưng có thể sử dụng không?

Trả lời

23

Tôi có thể tìm thấy ba cách gọi phương pháp này mà không chỉ định giá trị cho các tham số đầu tiên:

using System; 

class Test 
{ 
    static void PrintValues(string title = "Default", 
          params int[] values) 
    { 
     Console.WriteLine("{0}: {1}", title, 
          string.Join(", ", values)); 
    } 

    static void Main() 
    { 
     // Explicitly specify the argument name and build the array 
     PrintValues(values: new int[] { 10, 20 }); 
     // Explicitly specify the argument name and provide a single value 
     PrintValues(values: 10); 
     // No arguments: default the title, empty array 
     PrintValues(); 
    } 
} 

tôi đã không tìm thấy một cách để xác định nhiều giá trị mà không cần xây dựng một cách rõ ràng mảng dù ...

+0

Còn phản ánh thì sao? – Servy

+0

@Servy: Không, phản ánh sẽ yêu cầu bạn chỉ định tất cả các đối số. –

+1

Thật lạ khi trình biên dịch C# không cho phép sử dụng 'giá trị: {10,20}' hoặc 'giá trị: (10,20)'. Tôi đã tìm kiếm khá nhiều và có vẻ như cách của bạn là cách tốt nhất. – gdoron

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