Ошибка. В Microsoft.VisualBasic.dll произошла первая случайная ошибка типа "System.InvalidCastException".

Я работаю над простым алгоритмом сопоставления. Я новичок в программировании и не совсем понимаю ошибку, которую я получаю.

Файл.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

"Первое исключение исключения типа" System.InvalidCastException "произошло в Microsoft.VisualBasic.dll

Дополнительная информация: Преобразование из строки "" в тип "Целое число" недопустимо ".

Ошибка возникает для "CustomNrOld = split (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 ответа

В любом месте, где вы ссылаетесь на что-то в splits(), и вы хотите, чтобы он был в переменной Integer, вам нужно преобразовать свою строку в целое число (что говорит вам об ошибке).

Например: CustomNrNew = splits(0)

В этом коде вы пытаетесь присвоить значение String (splits - массив строк) в Integer (CustomNrNew). Вы не можете преобразовать строку непосредственно в целое число, поэтому вы получаете ошибку.

Чтобы преобразовать значение строки в целое число, попробуйте использовать CustomNrNew = Convert.ToInt32(splits(0)) (и замените "0" на любое значение, которое вы используете в каждой строке).


вы объявили расщепления как ведро строк

а затем попытался поместить строку в целое число

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

решит вашу проблему

licensed under cc by-sa 3.0 with attribution.