错误:Microsoft.VisualBasic.dll中出现类型为“System.InvalidCastException”的第一次机会异常

时间:2013-11-05 19:49:46

标签: vb.net

我正在研究一种简单的匹配算法。我对编程很陌生,并且不太了解我得到的错误。

File.txt包含此格式的数据(每行之间没有空格):

5,Name,9,9,9,9

4,Name,4,8,0,3 

3,Name,4,7,3,5 

2,Name,3,5,6,3 

1,Name,5,8,2,9

0,Name,2,5,3,2

“Microsoft.VisualBasic.dll中发生'System.InvalidCastException'类型的第一次机会异常

附加信息:从字符串“”到“整数”类型的转换无效。“

“CustomNrOld = splitits(0)”出现错误,我不明白为什么。

对任何形式的帮助都会感到高兴!!

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim CustomNrNew As Integer
        Dim NameIDnew As String
        Dim Alphanew As Integer
        Dim Betanew As Integer
        Dim Gammanew As Integer
        Dim Deltanew As Integer
        Dim CustomNrOld As Integer
        Dim NameIDold As String
        Dim Alphaold As Integer
        Dim Betaold As Integer
        Dim Gammaold As Integer
        Dim Deltaold As Integer
        Dim R1 As Integer
        Dim R2 As Integer
        Dim R3 As Integer
        Dim R4 As Integer

    Using sr As New StreamReader("C:\\Users\\Paul\\Documents\\Weever\\file.txt")
        Dim splits As String() = sr.ReadLine.Split(","c)
        CustomNrNew = splits(0)
        NameIDnew = splits(1)
        Alphanew = splits(2)
        Betanew = splits(3)
        Gammanew = splits(4)
        Deltanew = splits(5)
    End Using

    Using sr As New StreamReader("C:\\Users\\Paul\\Documents\\Weever\\file.txt")
        sr.ReadLine()
        Do While Not sr.EndOfStream
            Dim splits As String() = sr.ReadLine.Split(","c)
            CustomNrOld = splits(0)
            NameIDold = splits(1)
            Alphaold = splits(2)
            Betaold = splits(3)
            Gammaold = splits(4)
            Deltaold = splits(5)

            If Alphanew >= Alphaold = True Then
                R1 = (Alphaold / Alphanew) * 100
            Else
                R1 = (Alphanew / Alphaold) * 100
            End If

            If Betanew >= Betaold = True Then
                R2 = (Betaold / Betanew) * 100
            Else
                R2 = (Betanew / Betaold) * 100
            End If
            If Gammanew >= Gammaold = True Then
                R3 = (Gammaold / Gammanew) * 100
            Else
                R3 = (Gammanew / Gammaold) * 100
            End If
            If Deltanew >= Deltaold = True Then
                R4 = (Deltaold / Deltanew) * 100
            Else
                R4 = (Deltanew / Deltaold) * 100
            End If

            Dim Result As Integer
            Result = ((R1 + R2 + R3 + R4) / 4)

            My.Computer.FileSystem.WriteAllText("C:\\Users\\Paul\\Documents\\Weever\\" & NameIDnew & ".txt",
               Result & "%" & " - " & NameIDold & " " & R1 & "% / " & R2 & "% / " & R3 & "% / " & R4 & "% " & Environment.NewLine, True)

            My.Computer.FileSystem.WriteAllText("C:\\Users\\Paul\\Documents\\Weever\\" & NameIDold & ".txt",
               Result & "%" & " - " & NameIDnew & " " & R1 & "% / " & R2 & "% / " & R3 & "% / " & R4 & "% " & Environment.NewLine, True)
        Loop
    End Using

2 个答案:

答案 0 :(得分:1)

您在splits()中引用某些内容的任何地方,并且您希望它在Integer变量中,您需要将字符串转换为整数(这就是错误告诉您的内容)。

例如:CustomNrNew = splits(0)

在此代码中,您尝试将String值(splits是一个字符串数组)分配给Integer(CustomNrNew)。您不能将字符串直接转换为整数,因此您会收到错误。

要将字符串值转换为整数,请尝试使用CustomNrNew = Convert.ToInt32(splits(0))(并将'0'替换为每行使用的值。)

答案 1 :(得分:0)

你宣称拆分为一串字符串

然后尝试将字符串放入整数

CustomNrOld = Convert.ToInt32(splits(0));  

将解决您的问题