声明中初始化参数的含义及默认值生效时机技术咨询
关于C#可选参数的几个问题解答
嘿,我来帮你把这几个问题讲明白~
1. 参数声明中赋值的生效时机
在C#里,参数声明时赋值是用来定义可选参数的默认值,这个值的生效时机很明确:
- 当你调用方法时没有给该参数传递值,编译器会自动把默认值填充进去;
- 或者你调用时明确指定要使用默认值(比如用
default关键字,或者通过命名参数省略该参数)。
拿你的代码举几个实际调用的例子:
- 调用
GetBillingInfo()→ kValue用默认值"",quoteID用默认值-1; - 调用
GetBillingInfo("abc123")→ 只传了kValue参数,quoteID自动启用默认值-1; - 但如果调用
GetBillingInfo("abc123", 789),这时候quoteID就会用你传入的789,默认值完全不生效。
另外要提个细节:这个默认值是编译时确定的,不是运行时动态获取。比如如果你写int quoteID = someVariable,编译时会把someVariable当时的数值硬编码到调用处,而不是运行时再去取someVariable的最新值。
2. 声明中初始化参数的含义,以及quoteID何时为-1
声明中初始化参数的含义
这种写法本质上是把该参数定义为可选参数,核心作用是让方法支持多种调用方式,不用额外写多个重载方法。调用者可以根据需求选择传或不传这个参数,不传的时候就用你预先定义的默认值。
quoteID何时取值为-1?
结合你的代码(int quoteID = -1),分几种情况逐一说明:
- ✅ 省略该参数时:不管你是只传kValue,还是两个参数都不传,quoteID都会自动使用默认值
-1; - ✅ 明确传入-1时:这时候它的值也是-1,但这是你主动传递的,不属于默认值生效的场景;
- ❌ 传入null时:这里quoteID是
int类型(值类型),不能接收null,尝试传null会直接编译报错,不存在这种场景; - ❌ 始终为-1:当然不是,只要你传入其他有效的int值(比如1、100),quoteID就会用你传入的那个值。
补充个特殊情况:如果把参数改成int? quoteID = -1(可空值类型),这时候传入null的话,quoteID会是null,而不是-1,这点要区分开。
内容的提问来源于stack exchange,提问作者Kirsten
相关产品推荐
相关产品推荐

