Подтвердить что ты не робот

List.ForEach в vb.net - недоумение меня

Рассмотрим следующий пример кода:

    TempList.ForEach(Function(obj)
        obj.Deleted = True
    End Function)

И этот:

    TempList.ForEach(Function(obj) obj.Deleted = True)

Я ожидаю, что результаты будут одинаковыми, однако второй пример кода НЕ изменяет объекты в списке TempList.

Этот пост больше понять, почему...? Или хотя бы получить некоторую помощь, чтобы понять, почему...

4b9b3361

Ответ 1

Это потому, что вы использовали Function вместо Sub. Поскольку a Function возвращает значение, компилятор считает, что знак равенства (=) используется как сравнение, а не назначение. Если вы измените Function на Sub, компилятор правильно рассмотрит знак равенства как назначение:

TempList.ForEach(Sub(obj) obj.Deleted = True)

Если у вас была многострочная лямбда; у вас не было бы этой проблемы:

TempList.ForEach(Function(obj)
                     obj.Deleted = True
                     Return True
                 End Function)

Очевидно, что для метода ForEach нет смысла использовать Function, потому что возвращаемое значение не будет использоваться, поэтому вы должны использовать Sub.