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

C#访问属性内嵌套属性 Exercism称重机练习Pounds访问报错

问题根因
  • 类型不匹配:你声明USDisplayWeight属性的返回类型为USWeight结构体,但实际getter返回的是decimal类型的私有字段_pounds,导致访问USDisplayWeight时拿到的是数值类型,不存在Pounds属性,这就是编译器报错的直接原因。
  • 属性逻辑不合理:USDisplayWeight属于计算属性,无需私有字段存储值,也不需要定义setter,应当每次访问时基于当前的InputWeight实时计算生成USWeight实例。
  • 缺少单位转换逻辑:测试用例中InputWeight传入的是公斤单位,需要先转换为磅之后再传入USWeight构造函数,按照测试预期60公斤对应132磅,转换系数取2.2m即可。
修复方案
  1. 删除WeighingMachine类中无用的私有字段private decimal _pounds;
  2. 重写USDisplayWeight属性,代码如下:
public USWeight USDisplayWeight
{
    get 
    { 
        // 公斤转磅,匹配测试预期转换系数
        decimal weightInPounds = InputWeight * 2.2m;
        return new USWeight(weightInPounds);
    }
}

测试代码中wm.USDisplayWeight.Pounds的写法完全合法,USDisplayWeight返回USWeight结构体实例后就可以正常访问其Pounds属性,修改后即可通过测试。

内容的提问来源于stack exchange,提问作者RonCitrus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:09:03