C#如何传递布尔变量作为参数:修改原变量而非仅传值
问题原因
你遇到的问题核心在于C#中bool是值类型,默认参数传递方式为按值传递。调用myToggleFunction(myBool)时,程序会把myBool的值复制一份传给函数内的pBool参数,函数内部修改的只是这个副本,原变量myBool不会受到任何影响。
解决方案
以下几种方式都能实现修改原布尔变量的需求:
方式1:使用ref关键字传递引用
ref关键字会让参数按引用传递,函数内部操作的就是原变量本身,而非副本。
修改后的函数代码:
void myToggleFunction(ref bool pBool) { // 简化逻辑,无需冗长的if-else判断 pBool = !pBool; }
调用方式修改为:
myToggleFunction(ref myBool);
方式2:返回修改后的值并重新赋值
如果不想用引用传递,可以让函数返回切换后的布尔值,再赋值给原变量:
修改后的函数代码:
bool myToggleFunction(bool pBool) { return !pBool; }
调用方式修改为:
myBool = myToggleFunction(myBool);
方式3:使用out关键字(适合无需读取原值的场景)
如果函数不需要依赖原变量的初始值,仅需输出新值,可以用out关键字,但此场景下ref更贴合需求(因为我们需要基于原值切换状态),示例仅作参考:
void myToggleFunction(out bool pBool) { // 使用out必须给参数赋值,否则编译报错 pBool = true; }
调用时:
myToggleFunction(out myBool);
内容的提问来源于stack exchange,提问作者Budapest
相关产品推荐
相关产品推荐

