Integer.Parse
A String
sometimes contains digits. It is converted to an Integer in VB.NET with Integer.Parse
—this is a powerful function.
There are several Integer parsing Functions in .NET. TryParse
is often the best choice. We choose between these functions and use them in an optimal way.
We see a simple example that converts a String
containing digits into an actual Integer value. An Integer is often more convenient for a program.
String
with the contents "2020." This is not an Integer, but a representation of 2 digits in character form.Integer.Parse
. This Function receives the text string
and returns the Integer form of it.Module Module1 Sub Main() ' Step 1: an input string. Dim text As String = "2020" ' Step 2: convert string to integer value. Dim value As Integer = Integer.Parse(text) Console.WriteLine(value) End Sub End Module2020
Integer.TryParse
This is a programmatic way to both test for integers and parse them in a single pass. When parsing integers, we want to avoid exceptions and gracefully handle errors.
Integer.TryParse
shared method. TryParse
provides a tester-doer pattern to parsing.Integer.TryParse
function, which will not throw an exception if the input string is invalid.TryParse
.Module Module1 Sub Main() ' An invalid number string. Dim s As String = "x" ' Try to parse it. ' ... If it isn't a number, use -1. Dim num As Integer If Not Integer.TryParse(s, num) Then num = -1 End If ' Writes -1 to the screen. Console.WriteLine(num) End Sub End Module-1
ToInt32
Here we use Convert.ToInt32
to convert a String
to an int
. Internally, Convert.ToInt32
is implemented with Integer.Parse
. It throws on invalid input.
String
is converted to an Integer, in the same way as with Integer.Parse
. The Integer 500 is written to the Console
here.Module Module1 Sub Main() ' The input string you want to convert to Integer. Dim text As String = "500" ' Convert to an Integer. Dim value As Integer = Convert.ToInt32(text) ' Writes 500 to screen. Console.WriteLine(value) End Sub End Module500
FormatException
Here we see what happens when you try to parse a String
that does not contain a numeric value as an Integer. You will get a System.FormatException
.
Integer.Parse
was passed a String
in an invalid format.Integer.TryParse
.Module Module1 Sub Main() ' First entry try block. Try ' Parses invalid string and throws. Dim x As String = "bad" Dim y As Integer = Integer.Parse(x) Catch ex As Exception ' Write exception to screen. Console.WriteLine(ex) End Try End Sub End ModuleSystem.FormatException: Input string was not in a correct format.
ToInt32
Integer parsing is done in many VB.NET programs. Should we prefer a Function like Convert.ToInt32
, or the Integer.Parse
Function?
Convert.ToInt32
to convert the 4-character string
to an Integer.Integer.Parse
to perform the conversion. Like version 1, it should receive the Integer 1234.Convert.ToInt32
is slower than a call to Integer.Parse
. It contains some extra branch instructions.Module Module1 Sub Main() Dim m As Integer = 100000 Dim text As String = "1234" ' Version 1: use Convert.ToInt32. Dim s1 As Stopwatch = Stopwatch.StartNew For i As Integer = 0 To m - 1 Dim result As Integer = Convert.ToInt32(text) Next s1.Stop() ' Version 2: use Integer.Parse. Dim s2 As Stopwatch = Stopwatch.StartNew For i As Integer = 0 To m - 1 Dim result As Integer = Integer.Parse(text) Next s2.Stop() Dim u As Integer = 1000000 Console.WriteLine(((s1.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) Console.WriteLine(((s2.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) End Sub End Module79.19 ns Convert.ToInt32 76.20 ns Integer.Parse
string
With Integer.TryParse
we handle invalid strings much faster than with Integer.Parse
. Consider this benchmark. We try to parse the string
"xyz."
Integer.Parse
method throws an Exception
each time.TryParse
method is called. No exceptions are thrown. But the same result is returned.Integer.TryParse
method is many times faster than the Integer.Parse
method when dealing with invalid string
data.Module Module1 Sub Main() Dim m As Integer = 100000 Console.WriteLine(A()) Console.WriteLine(B()) Dim s1 As Stopwatch = Stopwatch.StartNew ' Version 1: use Try, Catch with Integer.Parse. For i As Integer = 0 To m - 1 A() Next s1.Stop() Dim s2 As Stopwatch = Stopwatch.StartNew ' Version 2: use Integer.TryParse. For i As Integer = 0 To m - 1 B() Next s2.Stop() Dim u As Integer = 1000000 Console.WriteLine(((s1.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) Console.WriteLine(((s2.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) End Sub Function A() As Integer ' Use Parse on an invalid string, but handle the exception. Dim result As Integer Try result = Integer.Parse("xyz") Catch ex As Exception result = 0 End Try Return result End Function Function B() As Integer ' Use TryParse on an invalid string. Dim result As Integer Integer.TryParse("xyz", result) Return result End Function End Module0 0 23907.64 ns Integer.Parse, Try, Catch 49.87 ns Integer.TryParse
Integer.Parse
and TryParse
are helpful. These functions are the most important and widely-used ones for converting integers to strings.