Considérez l'exemple de code suivant:
TempList.ForEach(Function(obj)
obj.Deleted = True
End Function)
Et celui-là:
TempList.ForEach(Function(obj) obj.Deleted = True)
Je m'attendrais à ce que les résultats soient les mêmes, mais le deuxième exemple de code ne change PAS les objets de la liste TempList.
Ce post est plus pour comprendre pourquoi ...? Ou du moins obtenir de l'aide pour comprendre pourquoi ...
C'est parce que vous avez utilisé Function
au lieu de Sub
. Puisqu'un Function
renvoie une valeur, le compilateur considère que le signe égal (=) est utilisé comme comparaison, pas comme affectation. Si vous remplacez Function
par Sub
, le compilateur considère correctement le signe égal comme une affectation:
TempList.ForEach(Sub(obj) obj.Deleted = True)
Si vous aviez un lambda multiligne; vous n'auriez pas eu ce problème:
TempList.ForEach(Function(obj)
obj.Deleted = True
Return True
End Function)
Évidemment, pour la méthode ForEach, il n'a aucun sens d'utiliser un Function
car la valeur de retour ne serait pas utilisée, vous devriez donc utiliser un Sub
.