Sử dụng hàm để xác định tham số tùy chọn


8

Có thể sử dụng giá trị trả về của hàm thay vì giá trị cụ thể làm tham số tùy chọn trong hàm không? Ví dụ thay vì:

public void ExampleMethod(int a, int b, int c=10)
{
}

Tôi muốn một cái gì đó như

private int ChangeC(int a, int b)
{
    return a+b;
}

public void ExampleMethod(int a, int b, int c=ChangeC(a,b))
{
}

4
Không, bởi vì các tham số cho phương thức đó không tồn tại trong bối cảnh đó. Bạn chỉ có thể sử dụng nó trên dòng đầu tiên của phương thức của bạn: c = c ?? ChangeC (a, b)
Glenn van Acker

Xin cho một ví dụ trong mã giả. Đó là một chút không rõ ràng những gì bạn muốn đạt được.
Alex

Bạn có thể có hai lần quá tải của phương thức - một với ba tham số & một với hai lần gọi đầu tiên bằng cách sử dụng kết quả của hàm gọi làm tham số thứ ba
PaulF

Câu trả lời:


8

Một trong những cách:

private int ChangeC(int a, int b)
{
    return a+b; 
} 

public void ExampleMethod(int a, int b, int? c=null)
{
    c = c ?? ChangeC(a,b);
}

16

Không, điều này là không thể. Để một tham số là tùy chọn, giá trị phải là hằng số thời gian biên dịch. Tuy nhiên, bạn có thể quá tải phương thức như vậy:

private int ChangeC(int a, int b){
    return a+b;
}

public void ExampleMethod(int a, int b, int c) {}

public void ExampleMethod(int a, int b)
{
    ExampleMethod(a, b, ChangeC(a, b));
}

3

Có thể sử dụng giá trị trả về của hàm thay vì giá trị cụ thể làm tham số tùy chọn trong hàm không?

Không, no không thể. Hướng dẫn lập trình C # về Đối số tùy chọn cho biết:

Giá trị mặc định phải là một trong các loại biểu thức sau:

  • một biểu thức không đổi;

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

  • một biểu thức của biểu mẫu default(ValType), trong đó ValTypelà một loại giá trị.

Xem câu trả lời khác cho các giải pháp thay thế.

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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.