【问题标题】:An unhandled exception of type 'System.OverflowException' Visual Basic WPF“System.OverflowException”Visual Basic WPF 类型的未处理异常
【发布时间】:2018-03-31 13:01:04
【问题描述】:

什么是 System.OverflowException?

    Private Sub buttonSD_Click(sender As Object, e As RoutedEventArgs) Handles buttonSD.Click
        AngkaPertama = textBox1.Text
        AngkaKedua = textBox2.Text

        If Kalkulasi = "+" Then
            Hasil = AngkaPertama + AngkaKedua
        ElseIf Kalkulasi = "-" Then
            Hasil = AngkaPertama - AngkaKedua
        ElseIf Kalkulasi = "*" Then
            Hasil = AngkaPertama * AngkaKedua
        ElseIf Kalkulasi = "/" Then
            Hasil = AngkaPertama / AngkaKedua
        End If

        textBoxHasil.Text = Hasil
    End Sub

我用的是Long,我需要用ULong吗?

【问题讨论】:

  • 分区中可能有问题。一个长除以一个长肯定可以产生一个双倍。还要检查除以零。
  • 事实上,long / long 的结果始终是 double。
  • Option Explicit/Option Strict - 目前你的变量是Variants,而VB.Net正在猜测应该是什么。此外,您正在使用Strings,然后在没有任何显式转换的情况下进行算术运算。
  • @AJD : Variant 在 VB.NET 中不存在。如果有的话,他们会是Objects。但是我认为 OP 已经在其他地方声明了变量,只是错过了向我们展示声明。 Option Explicit 默认开启,我怀疑 OP 已禁用它。
  • @VisualVincent:谢谢 - 我最近一直在两种语言之间交换 - 我自己有点困惑!

标签: wpf vb.net visual-studio-2015


【解决方案1】:

您需要在此周围放置一个 Try/Catch,这不是一个安全的子例程。加法和乘法很容易抛出 OverflowException。

当您尝试将结果分配给无法处理这么大数量的数据类型时,可能会发生溢出:https://msdn.microsoft.com/en-us/library/system.overflowexception(v=vs.110).aspx

例如,这样的事情会引发溢出:

Dim intType As Integer = Convert.ToInt32(Long.MaxValue)

我可以建议尝试一些更安全的方法吗:

Private Sub buttonSD_Click(sender As Object, e As RoutedEventArgs) Handles buttonSD.Click
    Try
        AngkaPertama = textBox1.Text
        AngkaKedua = textBox2.Text

        If Kalkulasi = "+" Then
            Hasil = AngkaPertama + AngkaKedua
        ElseIf Kalkulasi = "-" Then
            Hasil = AngkaPertama - AngkaKedua
        ElseIf Kalkulasi = "*" Then
            Hasil = AngkaPertama * AngkaKedua
        ElseIf Kalkulasi = "/" Then
            Hasil = AngkaPertama / AngkaKedua
        End If

        textBoxHasil.Text = Hasil
    Catch sofEx As OverflowException
        'put error in result box, or log it, or something
        textBoxHasil.Text = "Error: result too large"
    Catch ex As Exception
        'some other exception
        textBoxHasil.Text = ex.Message
    End Try
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2017-12-02
    • 1970-01-01
    • 2012-12-22
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多