我有这样的方法:
public static bool PrintSomething(Product p, Customer c = null, int ordinalNumber)
{
// ..My code
}
有时我会传递这个ordinalNumber
,有时候我不会,所以基本上这意味着这应该是可选参数?我是对的吗?
所以我想知道定义它的正确方法是什么? 将其分配为null或任何值?
任何形式的帮助都会很酷,谢谢!
答案 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
的定义可以省略Customer
和OrdinalNumber
,但省略Product
是不可能的。
这种方法的里程不尽相同,但其中一个意图只是为了避免创建一个不断增长的可选参数列表。
答案 3 :(得分:-1)
可选参数在参数列表的末尾定义
public static bool PrintSomething(Product p, int ordinalNumber, Customer c = null)
{
// ..Your code
}