Si vous examinez le code IL produit par ces deux extraits, vous constaterez que VB.NET convertit d'abord les valeurs entières en doubles, applique la division et arrondit le résultat avant de le reconvertir en int32 et de le stocker dans y.
C# ne fait rien de tout cela.
VB.NET IL Code :
IL_0000: ldc.i4.s 10
IL_0002: stloc.1
IL_0003: ldc.i4.s 0A
IL_0005: stloc.0
IL_0006: ldloc.1
IL_0007: conv.r8
IL_0008: ldloc.0
IL_0009: conv.r8
IL_000A: div
IL_000B: call System.Math.Round
IL_0010: conv.ovf.i4
IL_0011: stloc.2
IL_0012: ldloc.2
IL_0013: call System.Console.WriteLine
Code IL C# :
IL_0000: ldc.i4.s 10
IL_0002: stloc.0
IL_0003: ldc.i4.s 0A
IL_0005: stloc.1
IL_0006: ldloc.0
IL_0007: ldloc.1
IL_0008: div
IL_0009: stloc.2
IL_000A: ldloc.2
IL_000B: call System.Console.WriteLine
La division "correcte" des nombres entiers en VB nécessite une barre oblique inversée : p \ i