C# 参数顺序无关函数调用

C# 参数顺序无关函数调用,c#,C#,有没有一种方法可以将下面的函数场景实现为单个调用,这样对于调用方来说它看起来就像是单个调用(如果没有,我可以将它们声明为两个重载调用,但检查语言是否有一些特性) 添加(int,dateTime) 添加(日期时间,整数) 因此,调用方可以调用Add(2,DateTime.Now)或Add(DateTime.Now,2)。 我的场景是,要传递的参数将以数组形式出现,我希望调用方可以调用Add(args[0],args[1]) 我不能在这里使用参数名,因为任何参数都可以是任何类型。基本上我想有相当于

有没有一种方法可以将下面的函数场景实现为单个调用,这样对于调用方来说它看起来就像是单个调用(如果没有,我可以将它们声明为两个重载调用,但检查语言是否有一些特性)

添加(int,dateTime)

添加(日期时间,整数)

因此,调用方可以调用Add(2,DateTime.Now)或Add(DateTime.Now,2)。 我的场景是,要传递的参数将以数组形式出现,我希望调用方可以调用Add(args[0],args[1])

我不能在这里使用参数名,因为任何参数都可以是任何类型。基本上我想有相当于 日期时间+整数
int+dateTime

否,没有特定的语言功能


在这种情况下,您可以使用
params object[]
为该方法提供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 );
    }
    

  • 我建议你选择对你有意义的论点顺序,并坚持下去。以不同顺序对完全相同的参数列表进行多个重载是非常不常规的,并且可能会让API的使用者感到困惑

    调用方法时可以做的一件事是使用命名参数。如果您的消费者使用命名参数,他们可以按自己想要的顺序排列

    例如:

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

    您可以使用
    params object[]
    ,但如果对象的类型不同,这就很麻烦了。您将如何在方法中处理此问题?单个调用?不,除非您将这两个参数都设置为对象,这是没有用的。只需创建两个函数,将逻辑放在一个函数中,让另一个函数使用反向参数调用它。两个重载具有不同的参数顺序。在我看来,两个重载具有不同的参数顺序(但在其他方面参数相同)是不好的做法。API的用户可能会有点困惑,不知道该使用哪种API,或者它们之间的区别是什么。@RufusL s/有点困惑/极度愤怒/但除此之外是的