Действие (T) в Visual Basic в списке (T).ForEach

Используйте JavaScript, чтобы отключить кнопку, как только она нажата.

onclick="this.disabled=true;forms[0].submit();"
8
задан Michael Myers 21 May 2009 в 15:49
поделиться

4 ответа

Если вы используете VB9 (VS2008), я не думаю , что вы сможете легко использовать анонимную функцию - насколько мне известно, анонимные функции в VB9 имеют , чтобы быть реальными функциями (т.е. они должны возвращать значение), тогда как Action ничего не возвращает. Анонимные методы C # 2 и лямбда-выражения C # 3 являются более общими, поэтому вы увидите множество примеров, использующих List .ForEach из C #, и очень мало примеров, использующих VB: (

Вы могли потенциально написать оболочку MakeAction , которая принимает Function и возвращает Action , но я подозреваю, что другие ограничения на анонимные функции VB9 сделают это непрактичным.

Хорошей новостью является то, что VB10 имеет гораздо больше поддержки анонимных функций . (C # 4 и VB10 приобретают возможности друг друга - я считаю, что MS отныне пытается добиться языкового паритета в большей степени, чем раньше.)

А пока используйте List . ForEach вам необходимо написать соответствующий Sub и использовать AddressOf , чтобы создать из него делегата. Вот небольшой пример:

Imports System
Imports System.Collections.Generic

Public Class Test

    Shared Sub Main()
        Dim names as New List(Of String)
        names.Add("Jon")
        names.Add("Holly")
        names.ForEach(AddressOf PrintMe)

    End Sub

    Shared Sub PrintMe(ByVal text as String)
        Console.WriteLine(text)
    End Sub

End Class
11
ответ дан 5 December 2019 в 06:54
поделиться

Предполагая, что VB не поддерживает лямбда-выражения, вы можете создать экземпляр делегата Action (of T) в VB, используя следующий синтаксис:

new Action(Of T)(AddressOf Widget.Save)
0
ответ дан 5 December 2019 в 06:54
поделиться

Приведенное ниже должно работать, хотя я не в курсе VB.Net, поэтому вам может потребоваться соответствующая настройка.

widgetList.ForEach(w => w.Save())
-2
ответ дан 5 December 2019 в 06:54
поделиться

ну, сейчас я действительно устарел... :-) но в VB это:

widgetList.ForEach(Sub(w) w.Save())

или, более сложно:

widgetList.ForEach(New Action(Of Widged)(Sub(w As Widged) w.Save()))
14
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: