1

コードを編集したので、実行しようとすると、このエラーが発生します。

タイプ 'System.InvalidCastException' の未処理の例外が Microsoft.VisualBasic.dll で発生しました

追加情報: 文字列 "Holden 308" から型 "Integer" への変換は無効です。追加情報: 文字列「JD Catepillar Track」からタイプ「Integer」への変換は無効です。

そのため、どちらのエラーも New クラスをオーバーロードしている HeavyStockItem クラスで発生しています。なぜそれがそうしているのかを理解するために誰かが私を助けることができるかどうか疑問に思っています。

Option Strict On 

Public Class Form1
Dim StockItem1 As StockItem
Dim StockItem2 As CarEngine
Dim StockItem3 As CarEngine
Dim StockItem4 As StockItem
Dim StockItem5 As HeavyStockItem

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    StockItem1 = New StockItem("Screwdriver Set", 42)

    StockItem2 = New CarEngine(8025, "Madza B6T", 1252, 800, "Z4537298D")

    'StockItem3 = New CarEngine("Holden 308", 958, 1104, "P74623854S")

    StockItem4 = New StockItem(8002, "Trolley Jack", 127)

    'StockItem5 = New HeavyStockItem("JD Catepillar Track", 3820, 2830)
End Sub

Private Sub btnListStock_Click(sender As Object, e As EventArgs) Handles btnListStock.Click
    txtOutput.Clear()
    ShowOutput(StockItem1)
    ShowOutput(StockItem2)
    'ShowOutput(StockItem3)
    ShowOutput(StockItem4)
    'ShowOutput(StockItem5)
End Sub

Public Sub ShowOutput(ByVal Output As StockItem)
    txtOutput.Text &= Output.Print()
    txtOutput.Text &= vbCrLf
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnEnd.Click
    End
End Sub 
End Class

Public Class StockItem

Friend CostPrice As Integer
Friend LastStockNumber As Integer
Friend StockNumber As Integer
Friend Description As String
Friend Shared LastStockItem As Integer = 10000

Overridable Function Print() As String
    Dim Result As String = ""
    Result &= "Stock No: " & StockNumber
    Result &= vbCrLf
    Result &= "Description: " & Description
    Result &= vbCrLf
    Result &= "Cost Price: " & CostPrice
    Result &= vbCrLf
    Return Result
End Function

Public Sub New(ByVal StockNumber As Integer, Description As String, ByVal CostPrice As Integer)
    Me.New(Description, CostPrice)
    Me.StockNumber = StockNumber
End Sub

Public Sub New(ByVal Description As String, ByVal CostPrice As Integer)
    LastStockNumber += Rnd()
    Me.StockNumber = LastStockNumber
    Me.Description = Description
    Me.CostPrice = CostPrice
End Sub

Public Sub GetCostPrice()

End Sub
End Class

Public Class HeavyStockItem
Inherits Assessment3.StockItem
Friend Weight As Integer

Public Function GetWeight() As String
    Return Me.GetWeight
End Function

Public Sub New(ByVal StockNumber As Integer, ByVal Description As String, ByVal CostPrice As Integer, ByVal Weight As Integer)
    MyBase.New(StockNumber, Description, CostPrice)
    Me.Weight = Weight
End Sub

Public Sub New(ByVal Description As String, ByVal CostPrice As Integer, ByVal Weight As Integer)
    MyBase.New(Description, CostPrice, Weight)'' Where the error is occurring
    LastStockNumber += Rnd()
    Me.StockNumber = LastStockNumber
End Sub
End Class

Public Class CarEngine
Inherits Assessment3.HeavyStockItem

Friend EngineNumber As String

Overrides Function Print() As String
    Dim Result As String = ""
    Result &= "Stock No: " & StockNumber
    Result &= vbCrLf
    Result &= "Description: " & Description
    Result &= vbCrLf
    Result &= "Cost Price: " & CostPrice
    Result &= vbCrLf
    Result &= "Weight: " & Weight
    Result &= vbCrLf
    Result &= "Engine Number: " & EngineNumber
    Result &= vbCrLf
    Return Result
End Function

Public Sub New(ByVal StockNumber As Integer, ByVal Description As String, ByVal CostPrice As Integer, ByVal Weight As Integer, ByVal EngineNumber As String)
    MyBase.New(StockNumber, Description, CostPrice, Weight)
    Me.EngineNumber = EngineNumber
End Sub

Public Sub New(ByVal Description As String, ByVal CostPrice As Integer, ByVal Weight As Integer, ByVal EngineNumber As String)
    MyBase.New(Description, CostPrice, Weight)
    LastStockNumber += Rnd()
    Me.StockNumber = LastStockNumber
    End Sub

End Class

提供されたヘルプは素晴らしいでしょう。人々がコードの他の部分について尋ねた場合に備えて、本当に必要な小さなビットだけを配置するのではなく、完全なコードを提供する方が簡単だと思いました. あなたが助けを提供した場合、読んで助けを提供してくれてありがとう。

4

1 に答える 1

0

あなたのコードは私を混乱させたので、私は主に例外に頼っていました。

基本的に、文字列を整数に変換できないと言っています。同じ問題を引き起こす可能性のあるものを次に示します。

Dim Number As String = "10"

'Few Lines of code.

Number = 11
基本的に起こっていることは、変数を文字列として宣言するとき、宣言されたときにわかるように、その値を二重引用符で囲む必要があるということです。次に、二重引用符を追加せずに値を 11 に変更しようとしました。そのため、整数に変更していると見なされ、エラーが発生しました。

コードを調べたところ、これが原因である可能性があります。

Me.Description = Description<--- 引用なし!!!

私はコードを本当に理解していないので、おそらく間違っています。

于 2014-01-06T01:05:54.860 に答える