在C#中,我具有以下函数定义:

public static TResult SomeParentFunctionName<TSource, TResult>(TSource SomeValue,Func<TSource, TResult> ChildFunction1, Func<TSource, TResult> ChildFunction2)

此函数接受SomeValue,然后调用ChildFunction1ChildFunction2
根据我的业务规则,我总是需要运行ChildFunction1,但是只有有时需要需要运行ChildFunction2

我可以将ChildFunction2设为可选参数吗?我该怎么做呢?以及我如何知道它是否已传递。

我考虑过的选项:

1)我可以创建两个SomeParentFunctionName函数,一个使用ChildFunction2,另一个不使用。

2)我可以传入一个空白的函数,该函数什么也不做-但这不是一个好习惯。

注意:对于那些想大声问这个问题的人,如果您不能帮助,那就不要。

最佳答案

当然,只需将其设置为null即可:

public static TResult SomeParentFunctionName<TSource, TResult>(
    TSource SomeValue,
    Func<TSource, TResult> ChildFunction1,
    Func<TSource, TResult> ChildFunction2 = null)
{
    ...
    if (ChildFunction2 != null)
        ChildFunction2();
}

如果要为ChildFunction2传递函数,请继续进行操作。如果您不希望传递任何东西,只需在调用函数时将其忽略即可。

这实际上就是您所说的-optional argument

关于C#可选的Func参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24945007/

10-10 13:41