Tóm lại. Số
Các thông số tùy chọn được yêu cầu phải là hằng số thời gian biên dịch hoặc loại giá trị.
Từ Named and Optional Arguments (C# Programming Guide) trên MSDN:
Mỗi tham số tùy chọn có giá trị mặc định như một phần của định nghĩa của nó. Nếu không có đối số nào được gửi cho tham số đó, giá trị mặc định sẽ được sử dụng. 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;
- biểu thức của biểu mẫu
new ValType()
, trong đó ValType
là loại giá trị, chẳng hạn như enum hoặc cấu trúc;
- biểu thức của biểu mẫu
default(ValType)
, trong đó ValType
là loại giá trị.
gì bạn dường như muốn đạt được có thể được thực hiện bằng cách làm quá tải:
public string Download()
{
return Download(Encoding.UTF8);
}
public string Download(Encoding contentEncoding)
{
defaultEncoding = contentEncoding ?? Encoding.UTF8;
// codes...
}
Lưu ý rằng điều này không hoàn toàn giống như các tham số tùy chọn, như giá trị mặc định được cứng mã hoá vào người gọi với các tham số tùy chọn (đó là lý do tại sao các hạn chế cho chúng tồn tại).
Với giải pháp này, ông thậm chí có thể muốn ném 'ArgumentNullException' trong tình trạng quá tải thứ hai khi 'contentEncoding' là null. –