我可以根据方法调用的条件选择可选参数吗
本文关键字:选择 参数 条件 方法 调用 我可以 | 更新日期: 2023-09-27 18:29:18
如果我有一个具有以下签名的方法:
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 };
}
现在,我完全意识到上面的代码是无效的,而且有点奇怪,我也意识到可以重构该方法,以不同的方式获取参数,但问题是,是否可以编写这样的代码,根据条件在方法调用中调用特定的参数?
使用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);
}
}
您想要做的事情只能通过重载方法来完成。