是否可以使用函数的返回值代替特定值作为函数中的可选参数? 例如,代替:
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))
{
}
答案 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#编程指南说:
默认值必须是以下类型的表达式之一:
一个常量表达式;
default(ValType)
形式的表达式,其中ValType
是值类型。
有关其他解决方案,请参见其他答案。