You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:04:53