在声明中初始化参数是什么意思?
我最近看到这个代码感到很惊讶。 什么时候引用我是-1?每时每刻?如果它被传入null?,如果它被省略?
[HttpGet] [ActionName("GetBillingInfo")] public BillingInfo GetBillingInfo(string kValue = "", int quoteID = -1) { return _Repository.GetBillingDetails(kValue, quoteID); } }
[更新]
答案是为参数赋值会使参数成为可选参数。
这个问题与询问如何创建可选参数相反。
答案 0 :(得分:2)
这个概念被称为“默认值”,并允许使用不同的概念,“可选参数”。
简单地说,如果你调用方法并且不提供指定的参数,将使用它的默认值。
但是什么意思?
编译器可以通过两种方式解释这个概念:
那是哪个?
让我们看看两段独立的代码:
public void Test(int value = 42)
{
}
和
public void SomeOtherTest()
{
SomeInstance.Test(); // this is the same Test as above
}
让我们假设这两个项目在不同的项目中,因此将编译成不同的程序集,dll's。
在第二段代码的编译时发生的事情是编译器发现缺少的参数value
的默认值是42
,因此将此添加到已编译的代码中。
换句话说,第二段代码被视为如下所示:
public void SomeOtherTest()
{
SomeInstance.Test(42); // this is the same Test as above
}
注意参数调用中的附加42
。
因此问题中的语法意味着两件事:
为什么这很重要?
好吧,考虑一下上面两段代码是否存在于两个不同的项目中,然后编译成两个不同的程序集,dll's。
如果您稍后更改了声明该方法的项目的源代码,为了提供不同的默认值,另一个项目仍然会被编译为提供42。
除非重新编译正在进行调用的其他程序集,否则值42
仍将传递给方法。
答案 1 :(得分:1)
这称为可选参数。如果你在函数调用期间没有指定参数,则quoteID的值可以是-1,否则它将具有不可为空的值。如果传递null,则编译器将给出错误。如果你不引用ID来保持空值,那么你的函数签名应该如下所示
[HttpGet]
[ActionName("GetBillingInfo")]
public BillingInfo GetBillingInfo(string kValue = "", int? quoteID = -1)
{
return _Repository.GetBillingDetails(kValue, quoteID);
}
答案 2 :(得分:0)
这称为optional parameters。它只是意味着如果此方法的调用者不为这些参数提供值,那么将使用提供给参数的默认值。
答案 3 :(得分:0)
其可选参数,如果您将值传递给int quoteID
,它将保留该值,否则,它将是默认值-1
。
您可以通过4种方式调用您的方法
GetBillingInfo();//No parametes (kValue,quoteID)
GetBillingInfo("kvalue"); // KValue
GetBillingInfo("KValue" , 20); // kvalue + quoteID
您可以使用paramName(命名参数)
来调用它 GetBillingInfo(quoteID: 20) //quoteID
更新问题:如何创建可选参数
答案有问题
语法是
MethodName(DataType Param = <DefaultValue> , DataType Param2 = <DefaultValue>)
GetBillingInfo(string kValue = "", int quoteID = -1)