我需要调用作为参数传递的委托方法,但由于此参数是可选的,我想将默认值设置为在“目标”类中实现的方法。
这是一个几乎可以按预期工作的示例:
public class AgeCalculator
{
public void SetAge(Client client, Func<int, int> getAge = default(Func<int, int>))
{
client.Age = getAge != default(Func<int, int>) ? getAge(client.Id) : this.getAge(client.Id);
}
private int getAge(int clientId) {
return 10;
}
}
接着..
class Program
{
static void Main(string[] args)
{
AgeCalculator calculator = new AgeCalculator();
Client cli1 = new Client(1, "theOne");
calculator.SetAge(cli1);//Sets 10
calculator.SetAge(cli1, getAge);//Sets 5
}
private static int getAge(int clientId) {
return 5;
}
}
现在的问题;必须设置什么默认值才能避免询问委托值?
尝试了“public void SetAge(Client client, Func getAge = this.getAge)”,但没有成功。
AgeCalculator.getAge 上是否需要标签或不同的定义?我应该使用动态方法吗?
提前致谢。
注意:真实场景在面向TDD的项目中涉及更复杂的逻辑,这是一个总结情况的示例。