nullable types in C#

In C#, nullable types allow you to assign null values to value types, such as integers, booleans, and structs, which are typically non-nullable. By using nullable types, you can indicate that a value type variable can also have a null value in addition to its normal range of values.

To create a nullable type, you use the question mark ? after the type name. Here's an example that demonstrates nullable types in C#:


int? nullableInt = null;
bool? nullableBool = true;
double? nullableDouble = 3.14;
DateTime? nullableDateTime = DateTime.Now;

Console.WriteLine("Nullable int: " + nullableInt);
Console.WriteLine("Nullable bool: " + nullableBool);
Console.WriteLine("Nullable double: " + nullableDouble);
Console.WriteLine("Nullable DateTime: " + nullableDateTime);

In the example above, we declare variables of nullable types using the question mark syntax. The nullableInt is an int? that is assigned the value of null. The nullableBool is a bool? that is assigned the value of true. The nullableDouble is a double? that is assigned the value of 3.14. The nullableDateTime is a DateTime? that is assigned the value of the current date and time using DateTime.Now.

Nullable types allow you to check for null values using the HasValue property and retrieve the underlying value using the Value property. Here's an example:


int? nullableInt = null;
if (nullableInt.HasValue)
{
    int intValue = nullableInt.Value;
    Console.WriteLine("Nullable int value: " + intValue);
}
else
{
    Console.WriteLine("Nullable int is null");
}

In this example, we check if the nullableInt has a value using the HasValue property. If it does, we can retrieve the underlying value using the Value property and perform further operations. If it is null, we handle the null case accordingly.

Nullable types are particularly useful when working with databases or APIs that may return null values for value types. They provide a convenient way to handle nullability without resorting to additional flags or sentinel values.