C#访问属性内嵌套属性 Exercism称重机练习Pounds访问报错
问题根因
- 类型不匹配:你声明
USDisplayWeight属性的返回类型为USWeight结构体,但实际getter返回的是decimal类型的私有字段_pounds,导致访问USDisplayWeight时拿到的是数值类型,不存在Pounds属性,这就是编译器报错的直接原因。 - 属性逻辑不合理:
USDisplayWeight属于计算属性,无需私有字段存储值,也不需要定义setter,应当每次访问时基于当前的InputWeight实时计算生成USWeight实例。 - 缺少单位转换逻辑:测试用例中
InputWeight传入的是公斤单位,需要先转换为磅之后再传入USWeight构造函数,按照测试预期60公斤对应132磅,转换系数取2.2m即可。
修复方案
- 删除
WeighingMachine类中无用的私有字段private decimal _pounds; - 重写
USDisplayWeight属性,代码如下:
public USWeight USDisplayWeight { get { // 公斤转磅,匹配测试预期转换系数 decimal weightInPounds = InputWeight * 2.2m; return new USWeight(weightInPounds); } }
测试代码中wm.USDisplayWeight.Pounds的写法完全合法,USDisplayWeight返回USWeight结构体实例后就可以正常访问其Pounds属性,修改后即可通过测试。
内容的提问来源于stack exchange,提问作者RonCitrus
相关产品推荐
相关产品推荐

