Dart为num类型编写扩展判断整数/双精度浮点数报错如何解决
问题解答
报错原因
你遇到的类型不匹配报错确实和isDouble getter中传入的this相关,但并非this关键字本身有问题,核心原因是:double.tryParse方法规定仅接收String类型的入参,用于把字符串解析为双精度浮点数。而你的扩展定义在num类型上,此处的this指代当前调用扩展的num类型实例,把num类型的对象直接传给需要String参数的tryParse方法,自然触发类型不匹配的报错。
修正方案
判断num是否为double类型完全不需要走字符串解析的逻辑,推荐直接通过运行时类型判断实现,性能更高、逻辑更准确:
extension NumberExtension on num { bool get isInteger => (this % 1) == 0; // 直接判断当前实例的运行时类型是否为double bool get isDouble => this is double; }
如果你的业务场景确实需要通过字符串解析的逻辑校验,也可以先把num实例转为字符串后再传入tryParse:
extension NumberExtension on num { bool get isInteger => (this % 1) == 0; bool get isDouble => double.tryParse(this.toString()) != null; }
额外提示
Dart官方命名规范中,扩展类名建议使用大驼峰格式,你原来的numberExtension调整为NumberExtension更符合社区规范。
内容的提问来源于stack exchange,提问作者DolDurma
相关产品推荐
相关产品推荐

