2016-04-08 6 views
1

Als einfaches Beispiel, wobei der folgende Code erzeugt eine Überlaufausnahme:VB.NET mit einem Teil der Gleichung Umgang einem Überlauf Ausnahme

Sub Main() 
    Dim x As Int16 = 2^10 
    Dim y As Int16 = 2^10 
    Dim z As Int16 

    z = CType(x * y/y, Int16) 

    Console.WriteLine(z) 
    Console.Read() 

End Sub 

Wenn Arithmetik durchgeführt wird, scheint es, dass, da die Gleichung progressiv berechnet wird, einen Teil der Gleichung wird ein Ergebnis erzeugen, das größer ist als der Datentyp, in den das Ergebnis gehen wird. Ich weiß, ich könnte z einen größeren Datentyp wie Int32 machen, aber gibt es eine Möglichkeit zu sagen, den Ausdruck als Int32 auszuwerten, dann versuchen, es zu einem Int16 zu konvertieren, bevor es in z gespeichert wird?

+0

Dieser Code wird auch nicht unter Option Strict kompilieren – Plutonix

Antwort

0

Sie können x und y (Int16) in x2 und y2 (Int32) konvertieren und mit x2 und y2 berechnen.

Sub Main() 
    Dim x As Int16 = 2^10 
    Dim y As Int16 = 2^10 
    Dim z As Int16 

    Dim x2 As Int32 = x 
    Dim y2 As Int32 = y 
    z = CType(x2 * y2/y2, Int16) 

    Console.WriteLine(z) 
    Console.Read() 
End Sub