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

时间:2013-08-27 19:46:17

标签: c# .net parameters clr

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

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

现在,我完全清楚上面的代码是无效的,有点奇怪,我也知道该方法可以重构以不同的方式获取参数,但问题是它是否可能编写执行此操作的代码,根据条件调用方法调用中的特定参数?

2 个答案:

答案 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)

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