在C#中,我们可以提供参数的默认值:
void Foo(int i =0) {}
但是,当方法签名是:
void FooWithDelegateParam(Func<string,string> predicate)
{}
我们如何传递默认参数:
void FooWithDelegateParam(Func<string,string> predicate = (string,string x)=> {return y;})
{}
但这不会编译。那么,这样做的正确语法是什么?
注意:我正在尝试提供一种通过委托指定输入字符串到输出字符串映射器的方法,如果没有提供,我只想返回输入字符串。因此,对于实现这一目标的任何替代方法的建议也受到高度赞赏。感谢。
答案 0 :(得分:13)
基本上你不能。参数的默认值必须是编译时常量。但是,如果您乐意使用null
作为值含义&#34;请使用默认值&#34;你可以:
void FooWithDelegateParam(Func<string, string> predicate = null)
{
predicate = predicate ?? (x => x);
// Code using predicate
}
或者根据Alireza的建议使用过载。
利弊:
null
和&#34;默认&#34;。这本身就有利有弊:
null
值,则重载版本可以找到意外这样做的错误null
意味着默认&#34;通过多个层的值,只让最底层确定默认值实际意味着什么,并且这样做比简单地调用不同的重载更简单答案 1 :(得分:2)
您无法像这样指定默认值。写一个重载:
void FooWithDelegateParam()
{
FooWithDelegateParam(s => s);
}
void FooWithDelegateParam(Func<string,string> predicate)
{
}