使用函数定义可选参数

Joh*_*rtl 8 c# optional-parameters

是否可以使用函数的返回值而不是特定值作为函数中的可选参数?例如,而不是:

public void ExampleMethod(int a, int b, int c=10)
{
}
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

private int ChangeC(int a, int b)
{
    return a+b;
}

public void ExampleMethod(int a, int b, int c=ChangeC(a,b))
{
}
Run Code Online (Sandbox Code Playgroud)

Min*_*ipe 16

不,这是不可能的。对于可选的参数,该值必须是编译时常量。但是,您可以像这样重载该方法:

private int ChangeC(int a, int b)
{
    return a + b;
}

public void ExampleMethod(int a, int b, int c) {}

public void ExampleMethod(int a, int b)
{
    ExampleMethod(a, b, ChangeC(a, b));
}
Run Code Online (Sandbox Code Playgroud)

这样你就不必处理可为空的值类型


Gle*_*leb 8

方法之一:

private int ChangeC(int a, int b)
{
    return a+b; 
} 

public void ExampleMethod(int a, int b, int? c=null)
{
    c = c ?? ChangeC(a,b);
}
Run Code Online (Sandbox Code Playgroud)