使用函数定义可选参数

时间:2019-12-11 12:19:43

标签: c# optional-parameters

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

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

我想要类似的东西

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

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

3 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分: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);
}

答案 2 :(得分:3)

  

是否可以使用函数的返回值代替特定值作为函数中的可选参数?

不。这不可能。 Optional Arguments上的C#编程指南说:

  

默认值必须是以下类型的表达式之一:

     
      
  • 一个常量表达式;

  •   
  • 形式为new ValType()的表达式,其中ValType是值类型,例如enumstruct;

  •   
  • default(ValType)形式的表达式,其中ValType是值类型。

  •   

有关其他解决方案,请参见其他答案。