我非常 Visual Studio 2010的新功能。
对于我的课,我需要制作一个计算器。这个问题的要求是如果A或B为零,那么程序实际上不计算A或B;相反,程序将非零变量的值分配给eh结果,如果它们都为零,则只需将答案设为零。
这是我的代码:
Public Class Form1
Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click
Dim A As Decimal
Dim B As Decimal
Dim Result As Decimal
A = ABox.Text
B = BBox.Text
A = Decimal.Parse(ABox.Text)
B = Decimal.Parse(BBox.Text)
If (ABox.Text = 0) Then
ResultLabel.Text = BBox.Text
End If
If (BBox.Text = 0) Then
ResultLabel.Text = ABox.Text
End If
If (BBox.Text = 0 And ABox.Text = 0) Then
ResultLabel.Text = 0
End If
Result = A + B
ResultLabel.Text = Result.ToString("N2")
End Sub
我的问题如下:
关于这些类型的条件运算符的良好语法的任何其他提示?
抱歉听起来很愚蠢;我在这里找不到涵盖此类问题的主题。
答案 0 :(得分:1)
好的......首先,你根本不需要If
。 (增加的身份属性:对于任何x
,x + 0 = x
。)任何将要发生的错误都会在你到达它们之前发生,所以你唯一要做的就是说如果ABox
解析为零,BBox
的值类似于“5.000000”,所有这些零都将被复制到结果中。同样,如果方框相反。
此外,如果您使用Decimal.TryParse
而不是Decimal.Parse
,则输入框中的非数字内容不会终止您的程序。他们只会变成0。
使用某些代码(如
)可以得到类似的结果(减去额外的零)Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click
Dim A as Decimal, B as Decimal
Decimal.TryParse(ABox.Text, A)
Decimal.TryParse(BBox.Text, B)
ResultBox.Text = (A + B).ToString("N2")
End Sub
如果出于某种愚蠢的原因,你真的,真的需要所有 If 废话,你会想要使用ElseIf
来确保默认情况没有跑。
Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click
Dim A as Decimal
Dim B as Decimal
Decimal.TryParse(ABox.Text, A)
Decimal.TryParse(BBox.Text, B)
If A = 0 then
ResultBox.Text = BBox.Text
ElseIf B = 0 then
ResultBox.Text = ABox.Text
Else
Dim result as Decimal = A + B
ResultBox.Text = result.ToString("N2")
End If
End Sub
但这是浪费 - 而更糟糕的是,如果要添加两个数字,这是不正确的。有人可以在第一个盒子里放上“我喜欢奶酪”和“YAAAAAAAAAY !!!”在另一方面,结果将是“YAAAAAAAAAY !!!”。显然不会发生什么。
Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles AddButton.Click
Dim A as Decimal
Dim B as Decimal
Try
A = Decimal.Parse(ABox.Text)
B = Decimal.Parse(BBox.Text)
ResultBox.Text = (A + B).ToString("N2")
Catch ex as FormatException
MessageBox.Show("Exactly two numbers (one per box), please!")
End Try
End Sub
但我讨厌这样做是为了用户输入。您应该期望用户恶意和/或愚蠢,并指望他们尽一切可能搞乱您的应用程序。它稍后会为您节省大量的调试工作。但是,如果我们假设最坏的情况,那么输入错误真的是一种特殊情况吗?我拒绝。 (其他人可能不同意。但他们错了。:))
如果要通知用户输入错误,Decimal.TryParse
也会返回一个布尔值(true / false),说明它是否成功。如果失败,您可以显示一条消息,告诉用户退出白痴。 (如果你愿意的话,稍微外交一点。)
其次......打开Option Strict
。请。所有这些隐含的铸造都给了我坚强的意志。请注意,这可能会在您的列表中添加十几个错误...但这是好的事情。一个人应该知道当他们试图将一个数字放在一个字符串变量等等时,会导致很多魔法发生在那里(在我看来)人们需要更多地意识到这一点。
K,现在,至于调试......如果到目前为止你已经按照我的建议,你不应该真的需要调试。异常消失了,代码在你编译之前会更加正确。但是如果你仍然需要,那么逐步完成该程序的一种方法是在Function
行本身或者不是声明的第一行设置断点。 (单击该行旁边的左边距。一个红色的球应出现在你点击的边缘。这可以让你知道那里有一个断点。)你可以尝试在声明上设置一个断点,但我似乎记住导致断点要么在实际做某事的下一行,要么在函数的开头。我忘记了,并且没有VS在这台机器上检查。)
当你从VS运行程序时,程序将启动,当它到达断点时,VS将以红色箭头所在的黄色箭头弹回前景。黄色箭头指向要执行的下一行。从那里,您可以使用调试工具栏(查看工具栏;您应该有额外的按钮,蓝色我认为,看起来像播放/停止/等按钮)来逐步执行代码。您还应该看到标有“本地人”,“手表”以及您希望在一个有价值的调试器中看到的其他窗口的窗口。 :)
请注意,当程序在断点处停止或者单步执行代码时,应用程序将显示为冻结状态。 UI更新可能不会立即显示,因此,您将无法在输入框中键入任何内容或点击按钮直到您恢复(点击“播放”按钮)。