在C#中,我具有以下函数定义:
public static TResult SomeParentFunctionName<TSource, TResult>(TSource SomeValue,Func<TSource, TResult> ChildFunction1, Func<TSource, TResult> ChildFunction2)
此函数接受
SomeValue
,然后调用ChildFunction1
和ChildFunction2
根据我的业务规则,我总是需要运行
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/