C # 7 Error del compilador: coincidencia de patrones

Por alguna razón,M1() provoca un error del compilador, mientrasM2(), que hace lo mismo, no causa ningún error. ¿Alguna idea de por qué?

Utilizandofalse == debería ser lo mismo que usar el operador no,!.

Uso de la variable local no asignada 'i'

class Program {
    static void Main(string[] args) {
        int x = 8;

        M1(x);
        M2(x);
    }  // Main()

    public static void M1(Object obj) {
        if (false == (obj is int i))  // Causes ERROR on WriteLine
            return;

        System.Console.WriteLine(i); // Use of unassigned local variable 'i'
    }

    public static void M2(Object obj) {
        if (!(obj is int i))  // OKAY
            return;

        System.Console.WriteLine(i);
    }
} // class Program

Respuestas a la pregunta(2)

Su respuesta a la pregunta