【发布时间】:2021-10-23 09:57:39
【问题描述】:
所以我创建了这个名为“菜单”的列表,其中存储了菜单项的名称和价格。我已经使用类“MenuItem”完成了这项工作,其中我将name 声明为string,将price 声明为decimal。但是我在列表中遇到了这个错误,它不能从“double”转换为“decimal”,也不能从“string”转换为“double”。我确实有严格的选项,但即使关闭它,我在运行代码时也会收到此错误。
我尝试过使用 cdbl() 函数,如下所示:.cost =cdbl(2.0 * txtburger.text),但它仍然不起作用。
Dim menu As New List(Of MenuItem) From
{
New MenuItem With {.Name = "Burger", .Cost = 2.0 * txtburger.Text},
New MenuItem With {.Name = "wrap", .Cost = 2.0 * txtwrap.Text},
New MenuItem With {.Name = "Parmesan", .Cost = 2.5 * txtparmesan.Text},
New MenuItem With {.Name = "Stirfry", .Cost = 3.0 * txtstirfry.Text},
【问题讨论】:
-
假设
price是指Cost,如果此属性为十进制类型,则此:2.0是一个 Double 值,而此:txtburger.Text是一个字符串。这:Option Strict ON是您应该在项目属性中设置的内容。会有很大帮助的。 -
我确实在帖子中声明,我的 Option strict 已经开启。这并没有什么不同。
-
如果您将 Option Strict 设置为
ON,那么您将无法运行该应用程序,因为它不允许您编译它,因为您试图设置一个 Decimal 属性值乘以一个 Double通过一个字符串。此外,您在此处发布的整个内容都会变成红色。D是 Decimal 文字类型字符(因此,这是 Double:2.0,这是 Decimal:2.0D)和Decimal.TryParse()可以将字符串的内容转换为 Decimal 值,如果它验证的话。 -- Option StrictON可以帮助您,因为它可以让您在犯此类错误时立即看到它,因此您可以立即修复它们。 -
我以前问过这个。你有自己的 MenuItem 类吗? .net 框架提供的 MenuItem 类没有 Cost 属性。
-
只需使用
.Cost = 2.0 * Convert.ToDecimical(txtWhatever.Text.Replace(".",","))@Caius Jard 在下面的回答中也提到过。
标签: vb.net list oop error-handling type-conversion