Need to convert a string
in to an int
in C#? That sort of task is trivial thanks to the TryParse
method of the System.Int32
structure which is a standard part of the .NET Framework. TryParse
does exactly what you need by taking a properly formatted string and converting it to an integer.
The great thing about the built-in functionality is that you do not need to concern yourself with handling whitespace or the optional plus or minus sign in front of the number.
Back in the day, we had to wring the oil from the dinosaurs to run the generators before we could switch on the computers before we could even begin to write a function to handle this kind of conversion.
That’s how primitive it was in the early 1980’s!
The TryParse
function works by taking two parameters, the first parameter is a string representation of an integer number, meaning only digts and an optional sign — the function ignores any whitespace at the beginning or end of the string — and the second is an output only parameter, indicated by using the out
modifier keyword, to hold the result of the conversion. The function also returns a Boolean value indicating success (true
) or failure (false
).
Scroll down towards the bottom of the page for just the source code, or read on for how to use the function.
Int32.TryParse
Method Definitionpublic static bool TryParse(string s, out int result)
Parameter | Type | Description |
---|---|---|
s | System.String | String containing the number to convert. |
result | System.Int32 | A 32-bit signed integer equivalent to the number contained in System.String s parameter if the conversion succeeded. Contains zero if the conversion failed for any reason. |
Type | Description |
---|---|
System.Boolean | Returns Boolean true on a succcessful conversion, false otherwise. |
The conversion of the System.String s
parameter to a System.In32
integer will fail if the s
parameter is null
or not formatted as a valid integer. The conversion will also fail if the string representation of the number is less than System.Int32.MinValue
, which is -2,147,483,648, or System.Int32.MaxValue
, which is 2,147,483,647.
The System.Int32 result
parameter, because it is an out
(output only) parameter, does not need to be initialised before being passed to the function.
The TryParse
method is similar to the Parse
method of the System.Int32
structure except that the functionalty inside of TryParse
is wrapped in a try/catch
exception handler so that any errors in the conversion process are handled inside of the function. This means you do not have to deal with errors that would throw an exception. Most of the time, TryParse
is the function you need to do the heavy lifting for you, the Parse
method only being used when you want to know about the type of the exception and why the number could not be converted.
The System.String s parameter is formatted so:
[ws][sign]digits[ws]
Where:
Element | Description |
---|---|
ws | Optional white space which will be ignored. |
sign | An optional positive or negative sign. |
digits | One or more digits in the range 0 to 9. |
As you can see in the formatting table, any whistepace is ignored and the TryParse
method only works on normal decimal digits. To convert a hexadecimal string, the slightly more convoluted Int32.TryParse(String, NumberStyles, IFormatProvider, Int32)
needs to be used.
This program demonstrates how to convert a numeric value that is held in a string, to an integer value, using the TryParse functionality of the System.Integer class.
Enumerate the steps that the program will go through to solve the problem
TryParse
functionality of the integer type. using System;
class ConvertStringToInt
{
static void Main()
{
// declare a string variable with a value that represents a valid integer
string sillyMeme = "9001";
int memeValue;
// attempt to parse the value using the TryParse functionality of the integer type
int.TryParse(sillyMeme, out memeValue);
// print out a message if the converted value is above the required level fo the meme to activate
if (memeValue > 9000)
{
Console.WriteLine(String.Format("It's over 9000! ({0} to be exact.)", memeValue));
}
}
}
It's over 9000! (9001 to be exact.)
The program output shows that the integer contained in the sillyMeme
string was indeed converted correctly. It could easily be made to fail by changing the sillyMeme
string to contain an incorrectly formatted integer number, "900+1", for instance.
All of the intrinsic data types, int
, long
, string
, and so on, and their companion data structures, Int32
, Int64
, String
, contain a robust number of functions for converting between different formats. There are many ways, of course, of converting numbers held in strings but for the most part, TryParse
or Parse
will be the workhorse functions you use for performing the conversions in almost all cases, be it integer or floating-point, or even Boolean, to the actual data type itself.