C# 可选参数/多个必需

C# Optional parameters / multiple required

是否可以同时获取 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"))

无法通过谷歌搜索找到任何内容。对我来说,一种可能的方法是:

        /// <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
        }

我当然可以给我的函数这样的注释,但是为不合逻辑的给定参数写注释对我来说感觉很糟糕。

这个案例可能是一个不好的例子,但我相信我以后会 运行 再次参与这个案例。

非常感谢:)。

编辑以清除内容:
参数的可能组合:

我认为您需要旧方法 - 方法重载。

// 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 方法指定一个能够准确表达其含义的名称 - 这将有助于程序员(可能是您,我知道)为它们的当前状态调用正确的方法。


更新后

同上,名称反映需求,你应该仍然可以调用你原来的私有方法。重载确保你的一致性

public void AOnly(string A)
public void AAndBAndC(string A, bool B, string C)

正在努力破译这两个:

NOT A & B WITHOUT C !!!
NOT A AND C (Because B gives the point if C is needed)

您可以使用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");

我发现这对于具有许多可选参数的方法非常有用。

通过指定明确的参数名称,您以后可以在任何地方自由添加新的可选参数,而不会破坏现有代码。

据我了解,当 b 为假时,您希望 C 为可选;作为方法重载的练习,我认为你最接近的是:

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")

您刚刚获得了无法直接转换为简单重载的复杂逻辑。您要么将该逻辑放在被调用者或调用者中