繁体   English   中英

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

[英]Pass a function as argument AND set a default argument

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

void function(Action func) { } 

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

void function(int x = 0) { }

但是如果我尝试:

void function(Action func = anotherFunction) { }

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

您可以做的是

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

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

这是有关默认关键字的更多信息

编辑:我想如果您想让该方法在未设置'func'的情况下执行某些操作,则将检查它是否为null(在调用回调之前应始终执行此操作),如果是,则执行其他操作(您可以指定在那里执行什么操作或回调)。

EDIT2:正如mjwills所述,您还可以执行void function(Action func = null) { }

当您要使可选参数为结构时,默认关键字将更有用。

作为Chiris的答案的anotherFunction ,您可以通过在代码中设置anotherFunction来实现目标。 例如:

void function(Action func = null) {
    if(func == null)
        func = anotherFunction;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM