C#中Car类带可选参数的Update方法实现问题
问题分析与解决方案
你的代码存在两个核心问题:
- 创建新
car对象时,没有继承原对象的现有属性,直接将未传入的参数设为null,导致旧属性丢失 return car;存在编译错误,应该返回你创建的NewCar实例
以下是修正后的代码,实现仅更新传入参数、保留未传参数原有值的需求:
internal class car { public car() { } public car Update(string arg_color = null, int? arg_year = null) { car NewCar = new car(); // 先复制原对象的属性到新对象 NewCar.color = this.color; NewCar.year = this.year; // 仅当传入参数不为null时,覆盖对应属性 if (arg_color != null) { NewCar.color = arg_color; } if (arg_year != null) { NewCar.year = arg_year; } return NewCar; } public string? color { get; set; } public int? year { get; set; } }
代码说明
- 首先将当前对象(
this)的color和year赋值给新创建的NewCar,确保原有属性被保留 - 逐个判断传入的参数:如果参数不为
null,就用参数值覆盖新对象的对应属性 - 修正了返回语句,返回正确的新实例
简化写法(可选)
可以用对象初始化器结合空合并运算符让代码更简洁,效果完全一致:
public car Update(string arg_color = null, int? arg_year = null) { return new car { color = arg_color ?? this.color, year = arg_year ?? this.year }; }
??运算符的作用是:如果左侧参数不为null就用参数值,否则用右侧原对象的属性值。
内容的提问来源于stack exchange,提问作者another J.Doe
相关产品推荐
相关产品推荐

