Click here to Skip to main content
15,886,362 members
Articles / Programming Languages / C#

Difference Between Int32.Parse(), Convert.ToInt32(), and Int32.TryParse()

Rate me:
Please Sign up or sign in to vote.
4.14/5 (44 votes)
27 Jan 2009CPOL1 min read 248.2K   30   22
Difference between Int32.Parse(), Convert.ToInt32(), and Int32.TryParse()

Introduction

Int32.parse(string)

Int32.Parse (string s) method converts the string representation of a number to its 32-bit signed integer equivalent. When s is a null reference, it will throw ArgumentNullException. If s is other than integer value, it will throw FormatException. When s represents a number less than MinValue or greater than MaxValue, it will throw OverflowException. For example:

C#
string s1 = "1234"; 
string s2 = "1234.65"; 
string s3 = null; 
string s4 = "123456789123456789123456789123456789123456789"; 

int result; 
bool success; 

result = Int32.Parse(s1); //-- 1234 
result = Int32.Parse(s2); //-- FormatException 
result = Int32.Parse(s3); //-- ArgumentNullException 
result = Int32.Parse(s4); //-- OverflowException 

Convert.ToInt32(string)

Convert.ToInt32(string s) method converts the specified string representation of 32-bit signed integer equivalent. This calls in turn Int32.Parse () method. When s is a null reference, it will return 0 rather than throw ArgumentNullException. If s is other than integer value, it will throw FormatException. When s represents a number less than MinValue or greater than MaxValue, it will throw OverflowException. For example:

C#
result = Convert.ToInt32(s1); //-- 1234 
result = Convert.ToInt32(s2); //-- FormatException 
result = Convert.ToInt32(s3); //-- 0 
result = Convert.ToInt32(s4); //-- OverflowException 

Int32.TryParse(string, out int)

Int32.Parse(string, out int) method converts the specified string representation of 32-bit signed integer equivalent to out variable, and returns true if it is parsed successfully, false otherwise. This method is available in C# 2.0. When s is a null reference, it will return 0 rather than throw ArgumentNullException. If s is other than an integer value, the out variable will have 0 rather than FormatException. When s represents a number less than MinValue or greater than MaxValue, the out variable will have 0 rather than OverflowException. For example:

C#
success = Int32.TryParse(s1, out result); //-- success => true; result => 1234
success = Int32.TryParse(s2, out result); //-- success => false; result => 0
success = Int32.TryParse(s3, out result); //-- success => false; result => 0
success = Int32.TryParse(s4, out result); //-- success => false; result => 0

Convert.ToInt32 is better than Int32.Parse since it returns 0 rather than an exception. But again, according to the requirement, this can be used. TryParse will be the best since it always handles exceptions by itself.

History

  • 27th January, 2009: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect AgileWare
Brazil Brazil
15 years of software development

Comments and Discussions

 
GeneralMy vote of 2 Pin
silverghost00710-May-14 18:09
silverghost00710-May-14 18:09 
QuestionMessage Closed Pin
27-Sep-13 17:12
Member 1024450327-Sep-13 17:12 
AnswerRe: Benchmarks on Int.Parse(), Convert.ToInt32(), Int.TryParse() Pin
Alfredo_Fernandez7-Apr-16 9:10
Alfredo_Fernandez7-Apr-16 9:10 
GeneralMy vote of 5 Pin
desenvolvedor8224-Jan-13 17:40
desenvolvedor8224-Jan-13 17:40 
GeneralMy vote of 5 Pin
ssa201018-Jul-12 20:27
ssa201018-Jul-12 20:27 
SuggestionNice Work AgilWare Pin
Thilina Chandima26-Mar-12 3:30
Thilina Chandima26-Mar-12 3:30 
GeneralRe: Nice Work AgilWare Pin
Not Active27-Mar-12 16:08
mentorNot Active27-Mar-12 16:08 
GeneralMy vote of 2 Pin
Amit Narula30-Nov-09 5:39
Amit Narula30-Nov-09 5:39 
GeneralMy vote of 2 Pin
Stinky Boat18-Nov-09 13:20
Stinky Boat18-Nov-09 13:20 
GeneralExceptions are not necessarily bad Pin
Omer Mor28-Jan-09 6:22
Omer Mor28-Jan-09 6:22 
GeneralMy vote of 2 Pin
Omer Mor28-Jan-09 6:16
Omer Mor28-Jan-09 6:16 
GeneralUmm... Pin
PIEBALDconsult27-Jan-09 12:58
mvePIEBALDconsult27-Jan-09 12:58 
GeneralSome comments Pin
Colin Angus Mackay27-Jan-09 6:27
Colin Angus Mackay27-Jan-09 6:27 
GeneralRe: Some comments Pin
supercat927-Jan-09 8:05
supercat927-Jan-09 8:05 
GeneralRe: Some comments [modified] Pin
Colin Angus Mackay27-Jan-09 8:30
Colin Angus Mackay27-Jan-09 8:30 
GeneralRe: Some comments Pin
supercat927-Jan-09 9:26
supercat927-Jan-09 9:26 
GeneralRe: Some comments Pin
Colin Angus Mackay27-Jan-09 11:27
Colin Angus Mackay27-Jan-09 11:27 
SuggestionRe: Some comments Pin
David A. Gray4-Sep-15 17:29
David A. Gray4-Sep-15 17:29 
You state that catching a generic exception would run the risk of leaving a "real" exception, such as "out of memory" unhandled. My experience has been otherwise. I have yet to find an exception that falls through a generic System.Exception catch block. Moreover, the exception handler can identify and classify exceptions that derive from System.Exception by their derived type. For example, in my AppExceptionLogger class, there is a private method, ReformatExceptionMessage , which formats specific types of exceptions in ways not supported by their native Message properties.

Its first argument is an Exception. As always, Exception can be either a true System.Exception or an object that derives from System.Exception. The second executable statement calls the GetType ( ) method on the Exception, and stores the value of the FullName from the returned system.Type object into a string, which is the index into a Dictionary<string, string=""> of prefixes to be stripped from the beginning of the Message property of the supplied Exception object; the remainder of the string is retained, and becomes part of the final message that gets displayed and/or recorded.

C#
private static string ReformatExceptionMessage (
    Exception pexAnyKind ,
    string pstrRoutineLabel ,
    string pstrMessageTemplate )
{
    const string MESSAGE_PADDING = @"{0}               ";

    string strRawMsg = pexAnyKind.Message;

    string strExceptionTypeName = pexAnyKind.GetType ( ).FullName;
    string strTrimStartPoint = GetMessageTruncationStart ( strExceptionTypeName );
    string strTrimmedMsg = null;

    if ( string.IsNullOrEmpty ( strTrimStartPoint ) )
        strTrimmedMsg = strRawMsg;
    else
        if ( strRawMsg.IndexOf ( strTrimStartPoint ) == MagicNumbers.STRING_INDEXOF_NOT_FOUND )
            strTrimmedMsg = strRawMsg;
        else
            strTrimmedMsg = strRawMsg.Substring (
                MagicNumbers.STRING_SUBSTR_BEGINNING ,
                strRawMsg.IndexOf ( strTrimStartPoint ) );

    return string.Format (
        pstrMessageTemplate ,
        new string [ ]
            {
                strExceptionTypeName ,
                pstrRoutineLabel ,
                WizardWrx.StringTricks.ReplaceToken (
                    strTrimmedMsg ,
                    Environment.NewLine ,
                    string.Format (
                        MESSAGE_PADDING ,
                        Environment.NewLine ) ) ,
                Environment.NewLine
            } );

GeneralRe: Some comments Pin
Alfredo_Fernandez7-Apr-16 9:05
Alfredo_Fernandez7-Apr-16 9:05 
GeneralRe: Some comments Pin
David A. Gray7-Apr-16 11:57
David A. Gray7-Apr-16 11:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.