使用函数定义可选参数

Use a function to define an optional parameter

是否可以使用函数的 return 值而不是特定值作为函数中的可选参数? 例如代替:

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

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

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

这样您就不必处理可为 null 的值类型

其中一种方式:

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

Is it possible to use the return value of a function instead of a specific value as optional parameter in a function?

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

A default value must be one of the following types of expressions:

  • a constant expression;

  • an expression of the form new ValType(), where ValType is a value type, such as an enum or a struct;

  • an expression of the form default(ValType), where ValType is a value type.

查看替代解决方案的其他答案。