我有一个带有3个参数的方法,a,b,c
public MyObj SelectStuff(int A, string B, bool C)
{
...
}
我希望呼叫者被迫输入A或B,而不是两者兼而有之 - 并且总是C。使用命名参数是可取的。
所以这还可以
SelectStuff(A: 3, C: false)
这还可以
SelectStuff(B: "Hello", C: false)
这不是
SelectStuff(A: 2, B: "Bye", C: true)
这不是
SelectStuff(B: "hi")
我在Google上什么也看不到此。
,如果可能的话,我想要一种简洁的整洁方法,具有最小的代码。这可能吗?
您可以用三个参数隐藏该方法 private ,然后创建两个公共方法,并使用a或b的签名(始终使用C)。<<<<
这两种公共方法将调用内部方法传递丢失参数的常规值,以使您可以理解两种公共方法中的哪一个被称为
public MyObj SelectStuff(int A, bool C)
{
return SelectStuff(A, null, C);
}
public MyObj SelectStuff(string B, bool C)
{
return SelectStuff(-1, B, C);
}
private MyObj SelectStuff(int A, string B, bool C)
{
if(string.IsNullOrEmpty(B))
{
// Called from the method with A,C
....
}
else
{
// Called from the method with B,C
....
}
}
当然,此解决方案要求NULL字符串作为参数B没有有效的输入,并且对于具有值-1的整数A。
没有机会根据您的喜好限制参数。