Click here to Skip to main content
15,885,244 members
Articles / Programming Languages / C#
Tip/Trick

Converting a nullable object to an integer

Rate me:
Please Sign up or sign in to vote.
4.92/5 (10 votes)
16 May 2011CPOL 45K   4   4
Type conversion
I decided to write this tip/trick because my question[^] on the CodeProject's
questions[^] forum lead to quite some different thoughts.

How do we convert objects to integers?
C#
  1  int convertedInteger;
  2  object someValue; // Can be anything
  3  
  4  // The conversion
  5  Nullable<int> converted = someValue as Nullable<int>
  6  // Or shorter
  7  int? converted = someValue as int?;
  8  
  9  convertedInteger = (converted.HasValue) ? converted.Value : -1;


So for example, if you execute a Microsoft SQL Stored Procedure of which you are sure it returns an integer (or of course a null value), the best way is to use the returned value:

C#
  1  int storedProcedureResult = -1; // Default value is -1
  2  
  3  using (SqlCommand cmdMatch = new SqlCommand("spName", Connection))
  4  {
  5    cmdMatch.CommandType = System.Data.CommandType.StoredProcedure;
  6    int? result = cmdMatch.ExecuteScalar() as int?;
  7    storedProcedureResult = (result.HasValue) ? result.Value : -1;
  8  }


Some improvements to the code above (thanks to AspDotNetDev[^] who added an alternate):
C#
  1  int storedProcedureResult = -1; // Default value = -1
  2  
  3  using (SqlCommand cmdMatch = new SqlCommand("spName", Connection))
  4  {
  5    cmdMatch.CommandType = System.Data.CommandType.StoredProcedure;
  6    var converted = cmdMatch.ExecuteScalar() as int?;
  7    int storedProcedureResult = converted ?? -1;
  8  }


It may have been obvious to all you guys, but I struggled having to convert the returned object first to a string in order to use int.Parse() and int.TryParse():
C#
  1  
  2  // This block is marked red because this is NOT the correct way
  3  int storedProcedureResult = -1; // Default value is -1
  4  
  5  using (SqlCommand cmdMatch = new SqlCommand("spName", Connection))
  6  {
  7  
  8    cmdMatch.CommandType = System.Data.CommandType.StoredProcedure;
  9    object result = cmdMatch.ExecuteScalar();
 10    if (result != null)
 11    {
 12      int.TryParse(result.ToString(), out storedProcedureResult);
 13    }
 14  }


Now we all know the neat way. ;)

License

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


Written By
Architect http://4dotnet.nl
Netherlands Netherlands
I'm developing software for over two decades. I'm working as a cloud solution architect and a team lead at 4DotNet in The Netherlands.

In my current position, I love to help customers with their journey to the cloud. I like to create highly performant software and to help team members to a higher level of software development.

My focus is on the Microsoft development stack, mainly C# and the Microsoft Azure Cloud. I also have a strong affinity with Angular. As a result of my contributions to the community, I received the Microsoft MVP Award for Microsoft Azure.

Comments and Discussions

 
GeneralWell done! Proper handling of the null is utmost important i... Pin
DrABELL12-May-11 7:09
DrABELL12-May-11 7:09 
GeneralReason for my vote of 5 Excellent, thanks! Pin
edjeit18-Mar-11 5:35
edjeit18-Mar-11 5:35 
QuestionRed Code Block? Pin
AspDotNetDev18-Mar-11 7:53
protectorAspDotNetDev18-Mar-11 7:53 
AnswerRe: Red Code Block? Pin
Eduard Keilholz18-Mar-11 9:08
Eduard Keilholz18-Mar-11 9:08 

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.