参数顺序独立函数调用

时间:2017-04-14 17:52:30

标签: c#

有没有一种方法可以将下面的函数实现为单个调用,这样对于调用者来说它看起来像是单调调用(如果不是我可以将它们声明为2次重载调用,但检查语言是否有某些功能)

添加(int,dateTime)

添加(datetime,int)

以便调用者可以调用Add(2,DateTime.Now)或Add(DateTime.Now,2)。 我的场景是传递的参数将出现在数组中,我希望调用者可以调用Add(args [0],args [1])

我不能在这里使用参数名称,因为任何参数都可以是任何类型。基本上我想要相当于 DateTime + int int + dateTime

3 个答案:

答案 0 :(得分:1)

我建议只选择对你有意义的参数顺序,并坚持下去。在不同的顺序中具有完全相同的参数列表的多个重载是非常规的,并且可能使API的消费者感到困惑。

调用方法时可以做的一件事就是使用Named Arguments。如果您的消费者使用命名参数,他们可以按照他们想要的顺序放置它们。

例如:

public static DateTime Add(int daysToAdd, DateTime date)
{
    return date.AddDays(daysToAdd);
}

private static void Main()
{
    // Call the method passing the int first, then the DateTime
    var newDate1 = Add(daysToAdd: 5, date: DateTime.Now);

    // Call the method passing the DateTime first, then the int 
    var newDate2 = Add(date: DateTime.Now, daysToAdd: 5);
}

答案 1 :(得分:0)

不,没有特定的语言功能。

在这种情况下,您可以使用params object[]为该方法提供0个或更多参数,但我非常怀疑是否能够提供一个体面的代码并不容易出错。这意味着当您想要使用它们时,必须将每个参数强制转换为所需的类型。

如果您在呼叫方对类型进行硬编码,最好保留一种方法。

答案 2 :(得分:0)

  1. 定义其中一个,例如:

    Add(int offSet, DateTime dataTime)
    

    然后像这样使用它

    Add(offSet:2,dataTime:DateTime.Now) 
    Add(dataTime:DateTime.Now,offSet:2)
    
  2. 你也可以创建一个新方法:

    Add(DateTime dateTime, int offSet){
        Add(offSet,dateTime );
    }