Is there a way to write the C# method below:
public string Download(Encoding contentEncoding = null) {
defaultEncoding = contentEncoding ?? Encoding.UTF8
Use overloads:
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;
}
In short. No.
Optional parameters are required to be compile time constants or value types.
From Named and Optional Arguments (C# Programming Guide) on MSDN:
Each optional parameter has a default value as part of its definition. If no argument is sent for that parameter, the default value is used. A default value must be one of the following types of expressions:
- a constant expression;
- an expression of the form
new ValType()
, whereValType
is a value type, such as an enum or a struct;- an expression of the form
default(ValType)
, whereValType
is a value type.
What you seem to want to achieve can be accomplished by overloading:
public string Download()
{
return Download(Encoding.UTF8);
}
public string Download(Encoding contentEncoding)
{
defaultEncoding = contentEncoding ?? Encoding.UTF8;
// codes...
}
Note that this is not quite the same as optional parameters, as the default value gets hard coded into the caller with optional parameters (which is why the restrictions for them exist).