Discourant avec un développeur VB.Net, nous discussions de la meilleure manière d'écrire du code dépendant du Type d'une instance. Bien que tous les deux persuadés qu'un switch serait idéal, je soutenais qu'on ne pouvait en C# faire un switch sur le type d'une instance d'un objet. Mais mon collègue m'assurait qu'on pouvait le faire en VB.Net. Et effectivement, en VB.Net, le code suivant marche :
Une traduction en C# pourrait être :
Or ce code ne compile pas. En effet, l'expression
a is AA n'est pas constante, comme le requiert un switch en C#. Alors comment fait ce diable de compilateur VB.Net ? Il transforme tout simplement son bloc switch en l'équivalent d'une cascade de
if / else if, ce qu'il faut faire en C# pour avoir du code qui compile. Du coup, à la compilation, le
MSIL ne contient pas d'instruction switch. Cependant, même en C#, un bloc switch ne sera pas toujours converti en switch MSIL, alors c'est bien dommage de ne pas avoir d'équivalent, car cela éviterait des constructions syntaxiques plutôt lourdes comme on peut en trouver dans ma libraire
ILML. En effet, le traitement des instructions correspond parfaitement à l'exemple fourni ci dessus. Messieurs de chez Microsoft, un bon geste siouplé.