有没有一种方法可以将下面的函数实现为单个调用,这样对于调用者来说它看起来像是单调调用(如果不是我可以将它们声明为2次重载调用,但检查语言是否有某些功能)
添加(int,dateTime)
添加(datetime,int)
以便调用者可以调用Add(2,DateTime.Now)或Add(DateTime.Now,2)。 我的场景是传递的参数将出现在数组中,我希望调用者可以调用Add(args [0],args [1])
我不能在这里使用参数名称,因为任何参数都可以是任何类型。基本上我想要相当于 DateTime + int int + dateTime
答案 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)
定义其中一个,例如:
Add(int offSet, DateTime dataTime)
然后像这样使用它
Add(offSet:2,dataTime:DateTime.Now)
Add(dataTime:DateTime.Now,offSet:2)
你也可以创建一个新方法:
Add(DateTime dateTime, int offSet){
Add(offSet,dateTime );
}