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
}
我当然可以给我的函数这样的注释,但是为不合逻辑的给定参数写注释对我来说感觉很糟糕。
这个案例可能是一个不好的例子,但我相信我以后会 运行 再次参与这个案例。
非常感谢:)。
编辑以清除内容:
参数的可能组合:
- 只有一个
- A & (B & C)
- 不是 A 和 B
- 不是 A & C(因为如果需要 C,B 会给出分数)
我认为您需要旧方法 - 方法重载。
// 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")
您刚刚获得了无法直接转换为简单重载的复杂逻辑。您要么将该逻辑放在被调用者或调用者中
是否可以同时获取 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
}
我当然可以给我的函数这样的注释,但是为不合逻辑的给定参数写注释对我来说感觉很糟糕。
这个案例可能是一个不好的例子,但我相信我以后会 运行 再次参与这个案例。
非常感谢:)。
编辑以清除内容:
参数的可能组合:
- 只有一个
- A & (B & C)
- 不是 A 和 B
- 不是 A & C(因为如果需要 C,B 会给出分数)
我认为您需要旧方法 - 方法重载。
// 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")
您刚刚获得了无法直接转换为简单重载的复杂逻辑。您要么将该逻辑放在被调用者或调用者中