有条件地在C#中传递可选参数

时间:2018-07-03 17:46:03

标签: c# optional-parameters long-parameter-list

我有一个带有10个以上可选参数的函数,并且在程序中有一些设置可以确定是否应传递参数。例如,

public void MyFunction(bool? b1=null, bool? b2=null, bool? b3=null.. bool? b10=null)

以下是用于确定是否应设置参数的设置

bool setb1 = false;
bool setb2 = false;
bool setb3 = true;
bool setb4 = false;
bool setb5 = true;

如果要按照设置来设置参数,那么我将必须执行类似的操作

if (!setb1 && !setb2 && !setb4)
   MyFunction(b3: value3, b5: value5);

如果我有10个设置和10个参数,那么我将有太多组合,因此我认为我的实现不可行。完成此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您的函数有一个Long Parameter List

我将传递一个对象作为参数,创建一个类ConditionModle

您可以在此类中封装所需的条件。

public class ConditionModle
{
    public bool setb1 { get; set; }
    public bool setb2 { get; set; }
    public bool setb3 { get; set; }
    public bool setb4 { get; set; }
    public bool setb5 { get; set; }
    ....
    public bool Condition1()
    {
        return !this.setb1 && !this.setb2 && !this.setb4;
    }
}

if (model.Condition1())
    MyFunction(model);

此解决方案可以帮助您的代码

  1. 清除器
  2. 添加新属性或判断方法不会影响以前的方法。
  3. 添加新属性,您将不会修改调用方法参数。