将函数作为参数传递并设置默认参数

时间:2017-12-14 00:04:52

标签: c# .net visual-studio xamarin.forms

标题说明了一切。我正在编写一个函数,它接受另一个函数作为参数,如下所示:

void function(Action func) { } 

效果很好。我希望能够在没有任何参数的情况下调用该函数,因此我可以将那个函数用作另一个函数的参数,依此类推。我知道参数的默认值可以通过以下方式设置:

void function(int x = 0) { }

但如果我尝试:

void function(Action func = anotherFunction) { }

我收到一条错误,指出“'func'的默认参数值必须是编译时常量”。是否可以设置默认功能?如果是这样,怎么样?这是在跨平台的Xamarin Forms移动应用程序中使用,因此跨平台功能是必需的。所有函数都返回void,只接受一个参数。参数函数确定在用户单击“提交”后调用哪个函数

2 个答案:

答案 0 :(得分:3)

你能做的就是

void function(Action func = default(Action)) { }

func参数是可选的,但它的默认值为null。我非常确定您不能将func设置为已存在的默认操作,因为它是引用类型且不能是常量。

这里有一些enter image description here

编辑:我想如果你希望这个方法做某事,如果' 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;
}