c# - 如何级联可选参数?

标签 c# refactoring optional-parameters

我有一个带有可选参数的辅助方法

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

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

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

}

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

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

最佳答案

如果您希望默认值在两种方法之间同步,您真的不需要包装器中的默认值,对吧?

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);    
}

关于c# - 如何级联可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11130924/

相关文章:

c# - 有没有办法使用搜索选项 : All directories but it skips to the next folder after searching first layer of the folder

c# - Entity Framework 6.1 中的事务范围回滚

c++ - 在 C++ 中使用抽象基类和模板进行重构

java - 如何从java中的类中获取方法列表?

java - 避免过度使用方法重载

C# - 调用具有所有默认参数的结构构造函数

Python argparse 需要选项,具体取决于定义的标志

c# - 使用命名参数和可选参数来区分构造函数

c# - Fluent Nhibernate 在新的父级和子级上保存 child.parentid =parentId

c# - 尽管拥有正确的 NuGet 包,为什么我仍然需要在计算机上安装 MySQL 连接器?