使用函数定义可选参数

问题描述 投票:3回答:3

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

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))
{
}
c# optional-parameters
3个回答
5
投票

其中一种方式:

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);
}

11
投票

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

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
投票

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

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

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

  • 一个常量表达式;

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

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

请参阅其他答案以了解其他解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.