Search code examples
c#null-coalescing-operatornull-coalescing

Using null coalescing operator with a comparison


Given the method:

public static bool IsDateValid(DateTime? date)
{
    if (date.HasValue ? date.GetValueOrDefault() < MinDate : false)
    {
        return false;
    }

    return date.GetValueOrDefault() < MaxDate;
}

Is it possible to rewrite the if statement such that it uses the null-coalescing operator?


Solution

  • You can replace the whole function with

    return date.GetValueOrDefault() < MaxDate && Date > MinDate;
    

    GetValueOrDefault() will reutnr an empty DateTime (which is DateTime.MinValue) if it's null, and that won't be > MaxDate.

    You can write that explicitly too:

    return (date ?? DateTime.MinValue) < MaxDate && Date > MinDate;
    

    However, you don't even need that:

    return Date > MinDate && date < MaxDate;
    

    Nullable types have lifted comparison operators that return false if an argument is null.