我可以根据方法调用的条件选择可选参数吗

本文关键字:选择 参数 条件 方法 调用 我可以 | 更新日期: 2023-09-27 18:29:18

如果我有一个具有以下签名的方法:

void MyDummyMethod(<n_params>, Guid? foo = null, Guid? bar = null);

在我指定了所有n params之后,是否可以根据条件将值传递给foobar

例如:

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);
        }            
    }

您想要做的事情只能通过重载方法来完成。