Почему это (null ||! TryParse) приводит к «использованию неназначенной локальной переменной»?

Следующий код приводит киспользование неназначенной локальной переменной "numberOfGroups ":

int numberOfGroups;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
    numberOfGroups = 10;
}

Тем не менее, этот код работает нормально (хотя,ReSharper говорит= 10 избыточно):

int numberOfGroups = 10;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
    numberOfGroups = 10;
}

Я что-то упустил или компилятору не нравится мой?||

мы сузили это доdynamic вызывая проблемы (options была динамическая переменная в моем коде выше). Вопрос все еще остается,почему можетя это делаю?

Этот кодне компиляции:

internal class Program
{
    #region Static Methods

    private static void Main(string[] args)
    {
        dynamic myString = args[0];

        int myInt;
        if(myString == null || !int.TryParse(myString, out myInt))
        {
            myInt = 10;
        }

        Console.WriteLine(myInt);
    }

    #endregion
}

Тем не менее, этот кодделает:

internal class Program
{
    #region Static Methods

    private static void Main(string[] args)
    {
        var myString = args[0]; // var would be string

        int myInt;
        if(myString == null || !int.TryParse(myString, out myInt))
        {
            myInt = 10;
        }

        Console.WriteLine(myInt);
    }

    #endregion
}

Я не'не понимаюdynamic будет фактором в этом.

Ответы на вопрос(3)

Ваш ответ на вопрос