String 如何将dart中字符串内的两个变量相乘?
String 如何将dart中字符串内的两个变量相乘?,string,dart,string-interpolation,String,Dart,String Interpolation,“${element['price']*element['step']}c” 总是显示错误 The operator '*' isn't defined for the type 'Object'. 结果必须乘以两个变量并转换为字符串 怎么了?我找不到任何答案。按照文件说明制作 元素为 var element = { 'title': 'Apple and more more thing', 'category': 'Fruit', 'description': 'Some dat
“${element['price']*element['step']}c”
总是显示错误
The operator '*' isn't defined for the type 'Object'.
结果必须乘以两个变量并转换为字符串
怎么了?我找不到任何答案。按照文件说明制作
元素
为
var element = {
'title': 'Apple and more more thing',
'category': 'Fruit',
'description': 'Some data to describe',
'price': 24.67,
'bonus': '1% bonus',
'group': 'Picnik',
'step': 1.0
};
您可能需要将它们强制转换为特定类型。例如,如果它们的类型为双重
double
:
“${(元素['price']作为双精度)*(元素['step']作为int)}c”
将对象添加到问题后编辑。将“步骤”更改为int。您可能需要将它们转换为特定类型。例如,如果它们的类型为双重
double
:
“${(元素['price']作为双精度)*(元素['step']作为int)}c”
将对象添加到问题后编辑。将“step”更改为int。Dart是一种静态类型安全语言,因此在代码运行之前,已经对代码进行了分析,以确保没有静态确定的类型问题 在您的示例中,您定义了以下变量:
var element = {
'title': 'Apple and more more thing',
'category': 'Fruit',
'description': 'Some data to describe',
'price': 24.67,
'bonus': '1% bonus',
'group': 'Picnik',
'step': 1.0
};
通过使用var
可以告诉Dart它应该自动确定类型。在这种情况下也可以这样做。Dart将看到地图中的所有键都是String
,因此我们可以安全地假定键类型为String
然后,它查看这些值,并试图找到一种对所有值都通用的类型。由于我们有double
和String
作为值,因此类型必须是Object
,因为如果我们想要一个包含所有值的类型,我们不能更具体
因此,映射的类型将被确定为:map
当您在地图上使用[]
操作符时,它将被定义为从此地图返回对象
,因为这是我们唯一可以确定的
但当您尝试执行以下操作时,这是一个问题:
"${element['price'] * element['step']} c"
由于我们在analyzer阶段可以看到,我们将调用对象
上的*
运算符,因此analyzer将停止您的程序,并出现类型错误,因为您尝试执行的操作不被视为类型安全
有多种修复方法,您也可以在其他答案中看到:
类型转换
您可以告诉Dart“嘿,我知道我在做什么”,并强制Dart使用特定类型:
"${(element['price'] as double) * (element['step'] as double)} c"
动态
您可以将地图声明为包含dynamic
作为值:
var element = <String, dynamic>{
'title': 'Apple and more more thing',
'category': 'Fruit',
'description': 'Some data to describe',
'price': 24.67,
'bonus': '1% bonus',
'group': 'Picnik',
'step': 1.0
};
通过这样做,您可以确保Dart知道每个属性的类型并获得类型安全性。Dart是一种静态类型安全语言,因此在代码运行之前,已经对代码进行了分析,以确保没有静态确定的类型问题 在您的示例中,您定义了以下变量:
var element = {
'title': 'Apple and more more thing',
'category': 'Fruit',
'description': 'Some data to describe',
'price': 24.67,
'bonus': '1% bonus',
'group': 'Picnik',
'step': 1.0
};
通过使用var
可以告诉Dart它应该自动确定类型。在这种情况下也可以这样做。Dart将看到地图中的所有键都是String
,因此我们可以安全地假定键类型为String
然后,它查看这些值,并试图找到一种对所有值都通用的类型。由于我们有double
和String
作为值,因此类型必须是Object
,因为如果我们想要一个包含所有值的类型,我们不能更具体
因此,映射的类型将被确定为:map
当您在地图上使用[]
操作符时,它将被定义为从此地图返回对象
,因为这是我们唯一可以确定的
但当您尝试执行以下操作时,这是一个问题:
"${element['price'] * element['step']} c"
由于我们在analyzer阶段可以看到,我们将调用对象
上的*
运算符,因此analyzer将停止您的程序,并出现类型错误,因为您尝试执行的操作不被视为类型安全
有多种修复方法,您也可以在其他答案中看到:
类型转换
您可以告诉Dart“嘿,我知道我在做什么”,并强制Dart使用特定类型:
"${(element['price'] as double) * (element['step'] as double)} c"
动态
您可以将地图声明为包含dynamic
作为值:
var element = <String, dynamic>{
'title': 'Apple and more more thing',
'category': 'Fruit',
'description': 'Some data to describe',
'price': 24.67,
'bonus': '1% bonus',
'group': 'Picnik',
'step': 1.0
};
通过这样做,您可以确保Dart知道每个属性的类型并获得类型安全性。什么类型是
元素
?您显示的代码应该可以工作,元素中的变量似乎不是Dart认为能够使用乘法运算符的类型。我建议验证这两个变量的输出。@nileshenta如果映射中的类型被视为Object
,它将不能与toInt()
一起工作,因为您不能在Object
上调用toInt()
。那么您有一个map
包含多种类型的对象作为值吗?这就是Dart自动将地图声明为map
的原因,这意味着您需要键入从该地图获取的投射对象。我建议用您的数据创建一个类,这样您就可以获得类型安全性。@dev aentgs在我写评论时没有提供这个示例。但是,是的,重复组在这里也是有问题的……什么类型是元素
?您显示的代码应该可以工作,元素中的变量似乎不是Dart认为能够使用乘法运算符的类型。我建议验证这两个变量的输出。@nileshenta如果映射中的类型被视为Object
,它将不能与toInt()
一起工作,因为您不能在Object
上调用toInt()
。那么您有一个map
包含多种类型的对象作为值吗?这就是Dart自动将地图声明为map
的原因,这意味着您需要键入从该地图获取的投射对象。我建议用您的数据创建一个类,这样您就可以获得类型安全性。@dev aentgs在我编写时没有提供该示例