Tuesday, July 7, 2009

What’s the difference between ‘int?’ and ‘int’ in C#?

int? is the same thing as Nullable. It allows you to have "null" values in your int.
eg.
public bool AddProduct(string productName, int? supplierID, int? categoryID, string quantityPerUnit, decimal? unitPrice, short? unitsInStock, short? unitsOnOrder, short? reorderLevel, bool discontinued)

Explained :
int?, is the shortcut way of saying Nullable.
Value types, such as Int32, cannot hold the value null. This is a problem when dealing with databases, which can distinguish "no value" (e.g. DBNULL) from 0 and the ordinary range of values. The Nullable type helps overcome the divide between the world of .NET and the database world, as Nullable (or int?, if you prefer) can hold the value null (you can check the variable's HasValue property to see if it contains a value or not). Nullable also has a value property so that you can read the value (or you can simple cast the variable to the appropriate type.
So, to summarise.
int is a .NET value type holding a signed 32-bit integer. It has no HasValue or Value properties because it just is the value.int? is a shortcut for writing Nullable. To see if it currently holds a value you use the HasValue property. To read the value you either use a cast or read the Value property.

No comments:

Post a Comment