如何级联可选参数?

时间:2012-06-21 02:52:23

标签: c# refactoring optional-parameters

我有一个带有可选参数的工作方法

Work(string input = DefaultInput)
{
    //do stuff
}

我有一个包装器,它也带有字符串input,但这也可以是可选的......

WorkWrapper(int someParameter, string input = DefaultInput)
{
    //do initialization
    Work(input);

}

这里的问题是我重复对DefaultInput的引用,如果我将工作的默认输入更改为NewDefaultInput,我还需要更新workWrapper,否则它仍然会使用旧的默认值。

有没有办法让默认输入不需要声明两次?可能没有工作包装的两个重载..

1 个答案:

答案 0 :(得分:3)

如果你想让两个方法之间的默认值保持同步,你真的不需要包装器中的默认值,对吗?

public void Work(string input = DefaultInput)
{
    //do stuff
}

...

public void WorkWrapper(int someParameter, string inputOverride = null)
{
    //do initialization

    if (inputOverride == null) Work();
    else Work(inputOverride);    
}

如果它们属于同一个类/层次结构,您也可以声明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);    
}