Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

Converting a nullable object to an integer

4.92/5 (10 votes)
16 May 2011CPOL 46.7K  
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)