在签名中使用params string []重载函数

时间:2017-03-14 04:03:14

标签: c# .net c#-4.0

我有这两个功能

    public static string Function1 (string id, params string[])
    {
       return Function1(id, null, null, params)
    }

public static string Function1 (string id, string id2, Object a, params string[])
{
      string id = id,
      if (IsValidId(id))
      {
            start = new ProcessStartInfo();
            start.Arguments = params;
            if (string.IsNullOrEmpty(id2)==false)
            {
                start.RedirectStandardOutput = true;
            }
      }
}

我想在执行以下调用时使用第二个重载

MyStaticClaass.Function1(
        input1,
        input2,
        null, // (This one represents the Object)
        input3,
        input4,
        input5);

有没有办法可以强制它转到方法的第二个定义?

我遇到的编译错误是:这个调用在以下方法或属性之间是不明确的:(然后是上面的两个方法)

PS:我没有选择这两个功能。我不能改变他们的签名或他们的名字。

2 个答案:

答案 0 :(得分:6)

您可以使用Named arguments重载特定功能,例如

 Program.Function1(
        id: input1,
        id2: input2,
        o:null,
        array: new string[] {input3,
            input4,
            input5});

它会点击功能

public static string Function1 (string id, string id2, Object o, params string[] array)
{

}

有关详细信息,请查看此Named Arguments

答案 1 :(得分:1)

也可以这样:

var result = Rootobject.Function1(
               "",
               "",
               null, // (This one represents the Object)
               new string[] { "", "", ""});

然而,既然你已经知道这是一个脆弱的设计,或者你不会在这里询问它,也许你应该重新考虑你的重载。当然,我们让它工作,但它不是一个好的设计。