Wandelt eine generische Funktion beim Überprüfen auf Null implizit Werttypen in Objekte um?

Zum Beispiel demonstriert der folgende Code meine Gedankenrichtung:

class Program
{
    static void Main(string[] args)
    {
        int i = 0;
        IsNull(i);  // Works fine

        string s = null;
        IsNull(s);  // Blows up
    }

    static void IsNull<T>(T obj)
    {
        if (obj == null)
            throw new NullReferenceException();
    }

}

Auch der folgende Code:

int i = 0;
bool b = i == null;  // Always false

Gibt es eine implizite Objektbesetzung? so dass:

int i = 0;
bool b = (object)i == null;

Antworten auf die Frage(3)

Ihre Antwort auf die Frage