【发布时间】:2014-01-25 17:22:32
【问题描述】:
我正在构建一个包含一系列方法的库,每个方法都有几个我试图简化的重载。
许多方法都有重复的重载选项。例如
AddString(string option1)
AddString(string option1, int option2)
AddString(string option1, int option2, bool option3)
AddArray(string option1)
AddArray(string option1, int option2)
AddArray(string option1, int option2, bool option3)
现在,我知道我可以将它们指定为默认参数 - 具有指定默认值的参数。我不想这样做,因为我希望可以在项目之间配置默认值,甚至从调用者到调用者。
我也意识到我可以构建一个具有(可配置)默认值的 Options 对象,并且用户可以像这样将其实例传递给另一个重载
var options = new Options();
options.OptionProperty1 = "A new string";
AddString(options);
但我更喜欢有一个静态 Options 对象,其中包含所有参数的默认值,并且不知何故只指定内联调用中的更改,就像这样
AddString(options => options.Set(
OptionProperty1 = "A string",
OptionProperty2 = 1,
OptionProperty3 = true
));
这可能吗?如果可以,方法签名会是什么样子?
【问题讨论】:
标签: c# lambda parameter-passing anonymous-function optional-parameters