使用函数来定义可选参数

8

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

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

4
不行,因为该方法的参数在该上下文中不存在。你可以在方法的第一行使用它:c = c ?? ChangeC(a,b)。 - Glenn van Acker
请用伪代码举个例子。不太清楚你想要实现什么。 - Rob
你可以在方法中有两个重载 - 一个带有三个参数,另一个带有两个参数,并使用函数调用的结果作为第三个参数来调用第一个。 - PaulF
3个回答

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

这样你就不必处理可空值类型了。


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

3

是否可以在函数的可选参数中使用函数的返回值而不是特定的值?

不行。C#编程指南中可选参数的说明如下:

默认值必须是以下类型之一的表达式:
  • 常量表达式;
  • 形如 new ValType() 的表达式,其中 ValType 是值类型,例如 枚举结构体
  • 形如 default(ValType) 的表达式,其中 ValType 是值类型。
请参见其他答案以获取替代方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接