cil*_*ler 15 c# parameters optional
有没有办法编写下面的C#方法:
public string Download(Encoding contentEncoding = null) {
defaultEncoding = contentEncoding ?? Encoding.UTF8;
// codes...
}
Run Code Online (Sandbox Code Playgroud)
添加了默认参数,所以它看起来像这样:
public string Download(Encoding contentEncoding = Encoding.UTF8) {
// codes...
}
Run Code Online (Sandbox Code Playgroud)
不使用编译时常量?
Ode*_*ded 18
简而言之.没有.
可选参数需要是编译时常量或值类型.
从MSDN上的命名和可选参数(C#编程指南):
每个可选参数都有一个默认值作为其定义的一部分.如果没有为该参数发送参数,则使用默认值.默认值必须是以下类型的表达式之一:
- 一个恒定的表达;
- 表单的表达式
new ValType(),其中ValType是值类型,例如枚举或结构;- 表单的表达式
default(ValType),其中ValType是值类型.
您似乎想要实现的内容可以通过重载来完成:
public string Download()
{
return Download(Encoding.UTF8);
}
public string Download(Encoding contentEncoding)
{
defaultEncoding = contentEncoding ?? Encoding.UTF8;
// codes...
}
Run Code Online (Sandbox Code Playgroud)
请注意,这与可选参数不完全相同,因为默认值通过可选参数硬编码到调用者中(这就是为什么存在对它们的限制的原因).
使用重载:
public string Download(Encoding contentEncoding)
{
// codes...
}
public string Download()
{
return Download(Encoding.UTF8);
}
Run Code Online (Sandbox Code Playgroud)
public static string Download(Encoding encoder = null)
{
if (encoder == null)
encoder = Encoding.Default
string returnVal="";
// do something
return returnVal;
}
Run Code Online (Sandbox Code Playgroud)