如何在没有编译时常量的情况下设置可选参数
有没有办法编写下面的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; }