VB WPF 标签内容不显示数学计算

问题描述

今天我挑战自己用我不懂的语言 (VB) 制作一个简单的数学应用程序。 来自 C# 我认为它会很快,但至少我错了。

我想要做的是计算用户在 inputAlpha 和 inputBeta 文本框中实时输入的两个值,并在标签右侧的相应标签框中显示 Sum/Difference/Average/etc看。目前我陷入僵局,有两个问题。一个是 sumOutput.Content 没有显示局部变量 sum 是整数还是字符串的总和。第二个是数学实际上并不是将 10+10 相加,而只是将两者相加到 1010。我知道这对 99% 的人来说可能微不足道,但我来这里是为了从我的错误中吸取教训,所以我感谢你反馈。

Learning VB Math

解决方法

第一期:

这在 C# 中也不能正常工作。

在 VB 中,与 C# 一样,+ 运算符执行双重任务。它可以执行数学运算或连接字符串。由于您在两侧都使用 Text 属性,因此您有 String + String 将连接字符串。如果要进行数学运算,则需要先将值转换为数字。例如,您可以:

Dim left As Integer = Integer.Parse(inputAlphaTextBox.Text)
Dim right As Integer = Integer.Parse(inputBetaTextBox.Text)
Dim sum As Integer = left + right

第二个问题:

VB 没有像 C# 那样单独的赋值运算符 (=) 和相等运算符 (==)。它使用符号 = 表示赋值和相等,并使用上下文来决定它需要哪一个。

由于您使用的是 Return,因此它假定右侧有一个表达式。该表达式是 sumOutput.Content = sum.ToString()。由于它期待一个表达式,当它决定如何解释 = 运算符时,它选择相等。所以它试图返回 TrueFalse

这就是它变得奇怪的地方,我在做一些猜测。

您的函数返回 Integer,但这是一个 Boolean。那么为什么你没有收到编译错误呢?我将大胆猜测并假设您没有更改默认值,因此 Option Strict 已关闭。这允许 VB 进行一些您可能不期望的类型转换。 IIRC,False 将转换为整数 0True 将转换为整数 1

即使在 C# 中,编写的这段代码也不是很好的实践。它真的应该这样写:

Private Sub DoMath()
    Dim left As Integer = Integer.Parse(inputAlphaTextBox.Text)
    Dim right As Integer = Integer.Parse(inputBetaTextBox.Text)
    Dim sum As Integer = left + right
    
    subOutput.Content = sum.ToString()
End Sub

没有返回值,调用站点也不期望返回值,因此它应该没有返回值。在 C# 中这是一个 void 函数,在 VB 中这是一个 Sub。删除 Return 语句有助于 VB 理解您想要执行赋值,而不是进行比较。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...