【问题标题】:Pass a function as argument AND set a default argument将函数作为参数传递并设置默认参数
【发布时间】:2017-12-14 00:04:51
【问题描述】:

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

void function(Action func) { } 

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

void function(int x = 0) { }

但如果我尝试:

void function(Action func = anotherFunction) { }

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

【问题讨论】:

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


    【解决方案1】:

    你能做的就是

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

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

    这里有一些more info on the default keyword

    编辑:我想如果你想要在'func'没有设置的情况下做某事的方法,你会检查它是否为空(在调用回调之前你应该总是这样做),如果它是,做其他事情(你可以指定在那里做什么动作或回调)。

    EDIT2:正如 mjwills 提到的,您也可以这样做 void function(Action func = null) { }

    当你想要使可选的参数是一个结构时,默认关键字会更有用。

    【讨论】:

    • 由于 default(Action) 为 null,因此没有任何好处。任何一个都可以 - 我只是忘记了 Action 可以设置为 null 作为可选参数。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      相关资源
      最近更新 更多