方法调用无法更新变量值,疑似作用域问题求助
解决你的DateTime变量传值问题
哈哈,周一早上的脑雾真的很容易踩这种小坑!别自责,这其实是C#里值类型传值传递的典型问题,跟作用域没关系~
问题根源
DateTime是值类型,当你把currentDay作为参数传给SchedulePatchGroup方法时,C#会创建这个变量的一个副本传给方法。方法里对这个副本做的任何修改,都不会影响原来的currentDay变量——就像你复印了一张纸,在复印件上写字,原件根本不会变。
两种简单的解决方案
方案1:用ref关键字实现引用传递
把参数改成引用传递,这样方法操作的就是原变量本身,而不是副本:
void Main() { SetScheduleTicketsDate(); } public static void SetScheduleTicketsDate() { DateTime currentDay = DateTime.Now; // 调用时加上ref关键字 SchedulePatchGroup(ref currentDay); Console.WriteLine(currentDay); // 现在会输出修改后的值啦 } // 方法参数前加ref private static void SchedulePatchGroup(ref DateTime currentDay) { // 这里的修改会直接作用于原变量 currentDay = currentDay.AddDays(1); // 举个修改的例子 // 你的其他逻辑... }
方案2:让方法返回修改后的DateTime(更推荐)
这是C#里更惯用的写法,避免使用ref,让方法返回更新后的值,再赋值给原变量:
void Main() { SetScheduleTicketsDate(); } public static void SetScheduleTicketsDate() { DateTime currentDay = DateTime.Now; // 接收方法返回的修改后的值 currentDay = SchedulePatchGroup(currentDay); Console.WriteLine(currentDay); } // 方法返回修改后的DateTime private static DateTime SchedulePatchGroup(DateTime currentDay) { // 执行你的修改逻辑 DateTime updatedDay = currentDay.AddDays(1); // 示例修改 // 其他操作... return updatedDay; }
小提醒
值类型(比如int、bool、DateTime、结构体)默认都是传值传递;而引用类型(比如类的实例)传递的是引用的副本,但修改实例的属性会影响原对象——这是很多新手容易混淆的点,记住就好啦!
内容的提问来源于stack exchange,提问作者Connie DeCinko CS
相关产品推荐
相关产品推荐

