I realize the proper way to handle nullable types is to use the HasValue property. But I would like to know why the following switch statement breaks on the null case instead of default. Using VS2015 C#4.0. Another computer that is using VS2010 C#4.0 does not have this same problem.
 private void Testing()
    {
        bool? boolValue = true;
        switch (boolValue)
        {
            case null: 
                break; //even though value is true, code runs here
            default:
                break;
        }
    }
Edit: Behavior is observed with any Nullable if only case Null and default is specified.
This is going to be a very short answer: You just hit Roslyn bug #4701, reported two weeks ago.
The milestone is set to 1.1, so right now you'll have to workaround this with a separate if clause, while waiting for the next compiler update.
This is not an answer, I am just sharing IL code generated by VS2013 and VS2015.
Original C# code:
public void Testing()
{
    bool? boolValue = true;
    switch (boolValue)
    {
        case null:
            Console.WriteLine("null");
            break; 
        default:
            Console.WriteLine("default");
            break;
    }
}
VS2013 IL (decompiled):
public void Testing()
{
    bool? boolValue = new bool?(true);
    bool valueOrDefault = boolValue.GetValueOrDefault();
    if (boolValue.HasValue)
    {
        Console.WriteLine("default");
    }
    else
    {
        Console.WriteLine("null");
    }
}
VS2015 IL (decompiled):
public void Testing()
{
    bool? flag = new bool?(true);
    bool? flag2 = flag;
    bool? flag3 = flag2;
    if (flag3.HasValue)
    {
        bool valueOrDefault = flag3.GetValueOrDefault();
    }
    Console.WriteLine("null");
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With