如何通过可选参数(How To pass Optional Arguments)

2019-09-22 23:35发布

我已经有两个固定参数的一个功能。 但是,接下来的参数是不固定的,也可以是两个或三个或其中四个。

这是一个运行参数,以便我怎么可以定义函数?

我的代码如下所示:

public ObservableCollection<ERCErrors> ErrorCollectionWithValue
    (string ErrorDode, int MulCopyNo, dynamic arguments comming it should be 2 or 3)
        {

        return null;
    }

Answer 1:

1) PARAMS(C#参考)

public ObservableCollection<ERCErrors>ErrorCollectionWithValue
                (string ErrorDode, int MulCopyNo, params object[] args)
{
    //...
}

2) 命名和可选参数(C#编程指南)

public ObservableCollection<ERCErrors> ErrorCollectionWithValue
    (string ErrorDode, int MulCopyNo, object arg1 = null, int arg2 = int.MinValue)
{
    //...
}

3)也许简单的方法重载仍然会以更适用,分离方法的逻辑,以不同的方法? 在这个环节,你还可以找到命名参数和可选参数的另一种描述



Answer 2:

一种方法是有重载方法

public ObservableCollection<ERCErrors> ErrorCollectionWithValue
    (string ErrorDode, int MulCopyNo, int param1)
{
   //do some thing with param1
}

public ObservableCollection<ERCErrors> ErrorCollectionWithValue
    (string ErrorDode, int MulCopyNo, int param1,int param2)
{
   //do some thing with param1 and param3
}

public ObservableCollection<ERCErrors> ErrorCollectionWithValue
    (string ErrorDode, int MulCopyNo, int param1, int param2, int param3)
    {
       //do some thing with param1, param2 and param3
    }

那么所有这些将是有效的

var err = ErrorCollectionWithValue("text", 10, 1);
var err = ErrorCollectionWithValue("text", 10, 1,2);
var err = ErrorCollectionWithValue("text", 10, 1,2,3);

另一种方法是使用可选参数。 有了这个,你只需要一个方法,在第一种方法反对3。

public ObservableCollection<ERCErrors> ErrorCollectionWithValue
    (string ErrorDode, int MulCopyNo, int param1 = 0, int param2 = 0, optional int param3 = 0)
{

}

这些仍然有效

var err = ErrorCollectionWithValue("text", 10, 1); //defaults param2 and param3 to 0
var err = ErrorCollectionWithValue("text", 10, 1,2); //defaults param3 to 0
var err = ErrorCollectionWithValue("text", 10, 1,2,3);

要跳过任何可选参数,你需要使用命名参数和这个它仅支持C#4.0及以上

var err = ErrorCollectionWithValue("text", param3: 5); //skipping param1 and param2

在其他两种方法,你不能跳过的参数的顺序。



Answer 3:

你可以一起去PARAMS ,如果参数的数量可能会有所不同:

public ObservableCollection<ERCErrors> ErrorCollectionWithValue(string errorCode, int num, params object[] args) 
{ 
  foreach(object obj in args)
{
  //process args.
}
}


文章来源: How To pass Optional Arguments