【问题标题】:Is it possible to make a function with multiple parameters of different types take the parameters in any order without overloading?是否可以使具有多个不同类型参数的函数以任何顺序获取参数而不重载?
【发布时间】:2014-09-06 03:35:14
【问题描述】:

例如,如果一个函数接受 3 个不同类型的参数:

public void myFunction (int myInt, double myDouble, bool myBool)
{
    //Some code here
}

是否可以在不重载的情况下调用以任意顺序传递参数?

myFunction(aBool, anInt, aDouble);
myFunction(aDouble, aBool, anInt);
etc..

【问题讨论】:

  • 不是以您显示的方式,但您可以参考参数以按名称设置,IIRC 允许您以任意顺序指定它们。
  • 短于像public void myFunction(object[] args){} 这样的hacky - 不是真的......
  • 您可以使用参数名称,参见下面的示例。

标签: c# function parameter-passing


【解决方案1】:
  private void OperationOverLoadTest()
        {
            this.myFunction(1, 1.1D, true);
            this.myFunction(myDouble: 1.1D, myBool:false, myInt:1);

        }

        public void myFunction(int myInt, double myDouble, bool myBool)
        {
            //Some code here
        }

【讨论】:

  • OP 要求在不超载的情况下做到这一点。
【解决方案2】:

不,你不能直接这样做。有一些选择:

您可以使用命名参数来允许任意顺序。这将保留静态类型检查。

 myFunction(myBool:aBool, myInt:anInt, myDouble:aDouble);

您可以使用params 并失去类型检查。您需要检查传入的参数类型。这就是 JavaScript 通常实现具有可变数量参数的函数的方式:

public void myFunction (params object[] args)
{
    int myInt = args.OfType<int>().FirstOrDefault();
    ...
}

 myFunction(2.4, false, 3);

【讨论】:

  • 那不是params object[] args 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多