Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何级联可选参数?_C#_Refactoring_Optional Parameters - Fatal编程技术网

C# 如何级联可选参数?

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的默认输入

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

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