如果我有一个带有以下签名的方法:
void MyDummyMethod(<n_params>, Guid? foo = null, Guid? bar = null);
是否有可能在我根据条件指定了所有n params
之后,将值传递给foo
或 bar
?
例如:
void CallingDummyMethod()
{
myType var = new myType { Prop = 1 };
MyDummyMethod(<n_params_values>, if (var.Prop == 1) { foo: Guid.Empty } else { bar: Guid.Empty };
}
现在,我完全清楚上面的代码是无效的,有点奇怪,我也知道该方法可以重构以不同的方式获取参数,但问题是它是否可能编写执行此操作的代码,根据条件调用方法调用中的特定参数?
答案 0 :(得分:1)
使用params
并命名所有参数可能会这样做:
//void MyDummyMethod(Guid? foo = null, Guid? bar = null, params int[] list)
//{
// //do work
//}
//static void CallingDummyMethod()
//{
// MyClass variable = new MyClass { Prop = 1 };
// var ints = new int[] {1,2};
// if (variable.Prop == 1)
// {
// MyDummyMethod(list: ints, foo: Guid.Empty);
// }
// else
// {
// MyDummyMethod(list: ints, bar: Guid.Empty);
// }
//}
UPDATE 鉴于评论,固定的参数使解决方案更容易:
void MyDummyMethod(int one, int two, int three, Guid? foo = null, Guid? bar = null)
{
//do work
}
static void CallingDummyMethod()
{
MyClass variable = new MyClass { Prop = 1 };
if (variable.Prop == 1)
{
MyDummyMethod(1,2,3, foo: Guid.Empty);
}
else
{
MyDummyMethod(1,2,3, bar: Guid.Empty);
}
}
答案 1 :(得分:0)
您想要做的只能通过重载方法来完成。