Pour info, y'a pas mal de discussions sur les optimisations possibles (et du coup celles déjà implémentées) côté JIT dans divers cas de génération de code sur github:
https://github.com/dotnet/coreclr/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aoptimization%20J'avais zieuté quelques sujets, et j'ai au moins appris un truc intéressant… Aujourd'hui le JIT sait optimiser les conditions sur les champs static readonly… Du coup si tu veux du code conditionnel au moment du JIT (par exemple sur les types génériques, en fonction de leur(s) paramètre de type), le workaround recommandé aujourd'hui semble être d'utiliser un champ static readonly qui précalcule le résultat de ta condition ^^ (En contrepartie le code qui est dans la branche "fausse" de ton if/else sera complètement ignoré

)
À part ça, il manque encore pas mal de trucs, mais les développeurs en sont conscients, donc ça finira par venir ^^