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

Dart中List<int>变量传入List<double>参数出现类型错误的原因?

问题原因

这个差异是Dart的上下文类型推断规则导致的,两种写法的列表字面量被推断出的类型完全不同:

  • 直接传入sum([1, 3, 4, 6])时,sum函数要求的参数类型是List<double>,这个上下文会作用到列表字面量上,Dart会自动把字面量里的int元素推断为double类型,最终这个列表的类型是List<double>,所以调用合法。
  • 单独写var test = [1, 3, 4, 6];时,没有外部上下文约束,Dart会直接根据字面量里的元素都是int,把test变量推断为List<int>类型,而Dart里List<int>和List<double>是完全独立的泛型类型,不存在子类型关系,所以把List<int>传给要求List<double>的参数就会报错。

解决方案

你可以根据需求任选一种方案解决:

  1. 给sum函数用泛型适配所有数字类型,同时支持int和double输入:
double sum<T extends num>(List<T> elements) {
  double el = 0.0;
  for (var elem in elements) {
    el += elem.toDouble();
  }
  return el;
}
  1. 声明test变量时指定类型为List<double>,让Dart自动转换元素类型:
List<double> test = [1, 3, 4, 6];
var sm = sum(test); // 调用正常
  1. 调用sum时将test转换为List<double>类型:
var test = [1, 3, 4, 6];
var sm = sum(test.map((e) => e.toDouble()).toList());
  1. 高版本Dart也可以借助扩展操作符触发上下文类型推断:
var test = [1, 3, 4, 6];
var sm = sum([...test]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:04