标题说明了一切。我正在编写一个函数,它接受另一个函数作为参数,如下所示:
void function(Action func) { }
效果很好。我希望能够在没有任何参数的情况下调用该函数,因此我可以将那个函数用作另一个函数的参数,依此类推。我知道参数的默认值可以通过以下方式设置:
void function(int x = 0) { }
但如果我尝试:
void function(Action func = anotherFunction) { }
我收到一条错误,指出“'func'的默认参数值必须是编译时常量”。是否可以设置默认功能?如果是这样,怎么样?这是在跨平台的Xamarin Forms移动应用程序中使用,因此跨平台功能是必需的。所有函数都返回void,只接受一个参数。参数函数确定在用户单击“提交”后调用哪个函数
答案 0 :(得分:3)
你能做的就是
void function(Action func = default(Action)) { }
func参数是可选的,但它的默认值为null。我非常确定您不能将func设置为已存在的默认操作,因为它是引用类型且不能是常量。
编辑:我想如果你希望这个方法做某事,如果' func'没有设置,你会检查它是否为空(你应该在调用回调之前总是这样做),如果是,则执行其他操作(您可以指定要执行的操作或回调)。 / p>
EDIT2:正如mjwills所提到的,你也可以void function(Action func = null) { }
当您要使可选参数为结构时,默认关键字会更有用。
答案 1 :(得分:1)
补充Chiris的答案,您可以通过在代码中设置anotherFunction
来实现目标。 e.g:
void function(Action func = null) {
if(func == null)
func = anotherFunction;
}