C# 如何级联可选参数?
我有一个带有可选参数的worker方法C# 如何级联可选参数?,c#,refactoring,optional-parameters,C#,Refactoring,Optional Parameters,我有一个带有可选参数的worker方法 Work(string input = DefaultInput) { //do stuff } 我有一个包装器,它也接受字符串input,但这也是可选的 WorkWrapper(int someParameter, string input = DefaultInput) { //do initialization Work(input); } 这里的问题是我重复了对DefaultInput的引用,如果我将work的默认输入
Work(string input = DefaultInput)
{
//do stuff
}
我有一个包装器,它也接受字符串input
,但这也是可选的
WorkWrapper(int someParameter, string input = DefaultInput)
{
//do initialization
Work(input);
}
这里的问题是我重复了对DefaultInput的引用,如果我将work的默认输入更改为NewDefaultInput
,我还需要更新workWrapper,否则它仍将使用旧的默认值
是否有一种方法使默认输入不需要声明两次?可能没有workwrapper的两个重载。如果您希望默认值在两个方法之间同步,您真的不需要包装中的默认值,对吗
public void Work(string input = DefaultInput)
{
//do stuff
}
如果它们在相同的类/层次结构中,您也可以只声明一个
const
,以确保默认值保持不变
private const string DEFAULT_INPUT = "Default Input"; // protected if in base class
public void Work(string input = DEFAULT_INPUT)
{
//do stuff
}
public void WorkWrapper(int someParameter, string input = DEFAULT_INPUT)
{
//do initialization
Work(input);
}
Work
和WorkWrapper
都是公共的吗?如果是这样的话,这似乎有点奇怪。如果不是,你大概只需要给面向公众的默认值。@KirkWoll是的,客户机代码可以执行自己的初始化,或者只使用WorkWrapper中的初始化。。。嗯,方法名是假的,也许这就是你觉得奇怪的原因?如何使用someParameter
?如果它没有以某种方式传递给工作
,这似乎很奇怪。
private const string DEFAULT_INPUT = "Default Input"; // protected if in base class
public void Work(string input = DEFAULT_INPUT)
{
//do stuff
}
public void WorkWrapper(int someParameter, string input = DEFAULT_INPUT)
{
//do initialization
Work(input);
}