Dieses Verhalten ist eine Folge des Designs von IL, der Zwischensprache, die von allen .NET-Compilern erzeugt wird. Sie unterstützt zwar die kurzen Integer-Typen (byte, sbyte, short, ushort), hat aber nur eine sehr begrenzte Anzahl von Operationen mit ihnen. Laden, Speichern, Konvertieren, Array erstellen, das ist alles. Das ist kein Zufall, denn das sind die Art von Operationen, die man auf einem 32-Bit-Prozessor effizient ausführen konnte, als IL entwickelt wurde und RISC die Zukunft war.
Die binären Vergleichs- und Verzweigungsoperationen funktionieren nur bei int32, int64, native int, native floating point, object und managed reference. Diese Operanden sind 32-Bit oder 64-Bit auf jedem aktuellen CPU-Kern, so dass der JIT-Compiler effizienten Maschinencode erzeugen kann.
Mehr dazu finden Sie in der Ecma 335, Teil I, Kapitel 12.1 und Teil III, Kapitel 1.5
Ich habe einen ausführlicheren Beitrag darüber geschrieben hier drüben .