是否可以同时获得2个可选参数的要求?这是一个例子:
public void ParamChoise(string A, bool B = false, string C = "Y")
{
// Stuff here
}
如果B是可选的,我希望函数在B为真时需要C.从我的逻辑那样的东西:
public void ParamChoise(string A, (bool B = false, string C = "Y"))
无法通过Google搜索找到任何内容。对我来说,一种可能的方式是:
/// <summary>
/// If you want behaviour XXX to be enabled, please enter "C" for usage.
/// </summary>
/// <param name="A"></param>
/// <param name="C"></param>
public void ParamChoise(string A, string C = "Y")
{
// Stuff here
}
我确实可以给我的函数添加这样的评论,但是对于一个不合逻辑的给定参数写评论对我来说很糟糕。
这个案子可能是一个不好的例子,但我相信我将来会再次遇到这种情况。
非常感谢:)。
编辑清除内容:
参数的可能组合:
答案 0 :(得分:6)
我认为你需要旧方法 - 方法重载。
// b = true
public void ParamChoise(string A, string C)
// b = false
public void ParamChoise(string A)
他们应该拨打原始版本的私人版本
private void ParamChoiseInternal(string A, bool B = false, string C = "")
你应该确保给2个公共方法一个准确传达其含义的名称 - 这将有助于程序员(可能你,我知道)为他们当前的状态调用正确的方法。
更新后
与上面相同,名称反映了要求,您仍然可以调用原始的私有方法。重载确保您的一致性
public void AOnly(string A)
public void AAndBAndC(string A, bool B, string C)
努力破译这两个:
不是A&amp; B没有C !!!
不是A和C(因为如果需要C,B给出点)
答案 1 :(得分:1)
您可以使用named arguments
public void ParamChoise(string A = "", bool B = false, string C = "Y") {...}
// call it
ParamChoise(A: "123");
ParamChoise(C: "123");
ParamChoise(C: "123", A: "123");
ParamChoise(B: true, C: "123", A: "123");
我发现这对于有许多可选参数的方法非常有用。
使用明确的参数名称指定,您可以在以后随时添加新的可选参数 ,而不会破坏现有代码。
答案 2 :(得分:1)
从我可以收集的内容中,你想要C为可选的,而b是假的;作为方法超载的练习,我认为你得到的最接近的是:
void ParamChoise(string A, string C)
void ParamChoise(string A, bool B = true, string C = "Y")
你仍然需要在调用者中决定是否提供Bool ......这使得它现在无法做到:
void ParamChoiseBIsFalse(string A, string C)
void ParamChoiseBIsTrue(string A, string C = "Y")
您刚刚获得了无法直接转换为简单重载的复杂逻辑。您可以将该逻辑放在被调用者或调用者
中