À partir de la bibliothèque MSDN pour +=:
À l'aide de cet opérateur est presque la même que la spécification result = result + expression, sauf que le résultat n'est évaluée qu'une fois.
Donc ils ne sont pas identiques, et c'est pourquoi x += 1 sera plus efficace.
Mise à jour: je viens de remarquer que ma Bibliothèque MSDN lien a été à la JScript page au lieu de la VB page, qui ne contiennent pas la même citation.
Donc sur d'autres recherches et d'essais, la réponse ne s'applique pas à VB.NET. J'ai eu tort. Voici un exemple d'une application de console:
Module Module1
Sub Main()
Dim x = 0
Console.WriteLine(PlusEqual1(x))
Console.WriteLine(Add1(x))
Console.WriteLine(PlusEqual2(x))
Console.WriteLine(Add2(x))
Console.ReadLine()
End Sub
Public Function PlusEqual1(ByVal x As Integer) As Integer
x += 1
Return x
End Function
Public Function Add1(ByVal x As Integer) As Integer
x = x + 1
Return x
End Function
Public Function PlusEqual2(ByVal x As Integer) As Integer
x += 2
Return x
End Function
Public Function Add2(ByVal x As Integer) As Integer
x = x + 2
Return x
End Function
End Module
IL pour les deux PlusEqual1 et Add1 sont en effet identiques:
.method public static int32 Add1(int32 x) cil managed
{
.maxstack 2
.locals init (
[0] int32 Add1)
L_0000: nop
L_0001: ldarg.0
L_0002: ldc.i4.1
L_0003: add.ovf
L_0004: starg.s x
L_0006: ldarg.0
L_0007: stloc.0
L_0008: br.s L_000a
L_000a: ldloc.0
L_000b: ret
}
Le IL pour PlusEqual2 et Add2 sont quasiment identiques ainsi:
.method public static int32 Add2(int32 x) cil managed
{
.maxstack 2
.locals init (
[0] int32 Add2)
L_0000: nop
L_0001: ldarg.0
L_0002: ldc.i4.2
L_0003: add.ovf
L_0004: starg.s x
L_0006: ldarg.0
L_0007: stloc.0
L_0008: br.s L_000a
L_000a: ldloc.0
L_000b: ret
}