1

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

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

是否有可能在我指定了所有n params我可以根据条件将值传递给foo or bar

例如:

void CallingDummyMethod()
{
    myType var = new myType { Prop = 1 };
    MyDummyMethod(<n_params_values>, if (var.Prop == 1) { foo: Guid.Empty } else { bar: Guid.Empty };
}

现在,我完全知道上面的代码是无效的,而且有点奇怪,我也知道可以重构该方法以以不同的方式获取参数,但问题是是否可以编写代码那是根据条件调用方法调用中的特定参数吗?

4

2 回答 2

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

更新给定注释,固定参数使解决方案更容易:

   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);
        }            
    }
于 2013-08-27T20:28:03.513 回答
0

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

于 2013-08-27T19:59:48.413 回答