如何在没有编译时常量的情况下设置可选参数

有没有办法编写下面的C#方法:

public string Download(Encoding contentEncoding = null) { defaultEncoding = contentEncoding ?? Encoding.UTF8; // codes... } 

添加了默认参数,使其如下所示:

 public string Download(Encoding contentEncoding = Encoding.UTF8) { // codes... } 

不使用编译时常量?

简而言之。 没有。

可选参数需要是编译时常量或值类型。

从MSDN上的命名和可选参数(C#编程指南) :

每个可选参数都有一个默认值作为其定义的一部分。 如果没有为该参数发送参数,则使用默认值。 默认值必须是以下类型的表达式之一:

  • 不断表达;
  • 表达式为new ValType() ,其中ValType是值类型,例如枚举或结构;
  • forms为default(ValType)的表达式,其中ValType是值类型。

您似乎想要实现的内容可以通过重载来完成:

 public string Download() { return Download(Encoding.UTF8); } public string Download(Encoding contentEncoding) { defaultEncoding = contentEncoding ?? Encoding.UTF8; // codes... } 

请注意,这与可选参数不完全相同,因为默认值通过可选参数硬编码到调用者中(这就是为什么存在对它们的限制的原因)。

使用重载:

 public string Download(Encoding contentEncoding) { // codes... } public string Download() { return Download(Encoding.UTF8); } 
 public static string Download(Encoding encoder = null) { if (encoder == null) encoder = Encoding.Default string returnVal=""; // do something return returnVal; }