如何在方法中正确定义可选参数

时间:2018-02-03 16:39:59

标签: c# .net methods

我有这样的方法:

public static bool PrintSomething(Product p, Customer c = null, int ordinalNumber)
{
 // ..My code 
}

有时我会传递这个ordinalNumber,有时候我不会,所以基本上这意味着这应该是可选参数?我是对的吗?

所以我想知道定义它的正确方法是什么? 将其分配为null或任何值?

任何形式的帮助都会很酷,谢谢!

4 个答案:

答案 0 :(得分:1)

public static bool PrintSomething(Product p, Customer c = null, int ordinalNumber = -1)
{
}

我认为ordinalNumber是列表中项目的索引,因此填写时不能为负数:

if (orindalNumber < 0) // parameter was not filled i

答案 1 :(得分:1)

您可以通过声明两个名称相同但签名不同的方法来使用方法重载:

public static bool PrintSomething(Product p, Customer c = null)
{
 // ..My code 
}

public static bool PrintSomething(Product p, Customer c = null, int ordinalNumber)
{
 // ..My code 
}

现在,当您调用方法PrintSomething时,ordinalNumber参数是可选的。

答案 2 :(得分:0)

由于“正确”可能有不同的含义,我会再提出一个选项:

public class PrintRequest
{
    public Product Product { get; }
    public Customer Customer { get; set; }
    public int? OrdinalNumber { get; set; }

    public PrintRequest(Product product)
    {
         if(product = =null)
             throw new ArgumentNullException(nameof(product));
         Product = product;
    }
}

public static bool PrintSomething(PrintRequest printRequest)

现在该方法没有三个参数,其中一些是可选的:它有一个。 PrintRequest的定义可以省略CustomerOrdinalNumber,但省略Product是不可能的。

这种方法的里程不尽相同,但其中一个意图只是为了避免创建一个不断增长的可选参数列表。

答案 3 :(得分:-1)

可选参数在参数列表的末尾定义

public static bool PrintSomething(Product p, int ordinalNumber, Customer c = null)
{
 // ..Your code 
}

ref https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments