web-dev-qa-db-fra.com

List.ForEach dans vb.net - me perplexe

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 ...

25
Graham Whitehouse

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.

53
Meta-Knight