Есть ли аналог на VB?

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Есть ли аналог на VB?

Сообщение Roman Koff » 26.09.2010 (Вс) 18:18

Факультативный вопрос для личного развития.

В сях применяется такая вот удобная конструкция:
(условие) ? (значение для true) : (значение для false)
Пример:
Код: Выделить всё
stop = (count == 100) ? true : false


Есть ли аналог для VB9+?
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Есть ли аналог на VB?

Сообщение FireFenix » 26.09.2010 (Вс) 18:32

Код: Выделить всё
Stop = If(Count = 100, True, False)
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Есть ли аналог на VB?

Сообщение Debugger » 26.09.2010 (Вс) 18:39


Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Есть ли аналог на VB?

Сообщение Roman Koff » 26.09.2010 (Вс) 19:37

Зачетна, спасибо...

Я так понял, что IF() оптимальнее IIF()
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Есть ли аналог на VB?

Сообщение Admiralisimys » 30.12.2011 (Пт) 20:49

С Наступающими!

Подскажите, есть ли прямой аналог следующего кода, столь же компактный?
Код: Выделить всё
LinkLabel lnk = new LinkLabel();
//...
lnk.LinkClicked +=
    delegate { Process.Start("Some Site"); };

Не компактный аналог на VB.NET будет AddHandler lnk.LinkClicked, AddressOf LinkOnClick с последующим описанием процедуры LinkOnClick (в которой и помещаем Process.Start("Some Site")).

Переводчик http://www.developerfusion.com/tools/co ... arp-to-vb/ предложил несобирающийся вариант
Код: Выделить всё
AddHandler lnk.LinkClicked, Function() Do
    Process.Start("Some Site")
End Function


P.S.
Похоже, что нет. Эта техника называется "анонимный метод"
Алексей Ширшов в статье ''Что нового в VB.NET Whidbey?'' для журнала RSDN Magazine #1-2004 писал(а):Анонимные методы являются «синтаксическим сахаром» (syntactic sugar) и вряд ли появятся в VB.NET
http://www.rsdn.ru/article/vb/vbnet.xml#EPRAE

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.12.2011 (Пт) 22:38

Admiralisimys писал(а):С Наступающими!

И тебя :)

Admiralisimys писал(а):Переводчик http://www.developerfusion.com/tools/co ... arp-to-vb/ предложил несобирающийся вариант
Код: Выделить всё
AddHandler lnk.LinkClicked, Function() Do
    Process.Start("Some Site")
End Function

Этот код почти правильный. Только слово Do в нём не нужно:
Код: Выделить всё
AddHandler lnk.LinkClicked, Function()
  Process.Start("Some Site")
End Function
а можно ещё более компактно:
Код: Выделить всё
AddHandler lnk.LinkClicked, Function() Process.Start("Some Site")

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Есть ли аналог на VB?

Сообщение Admiralisimys » 30.12.2011 (Пт) 23:03

Qwertiy спасибо, последний вариант точно нужно.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.12.2011 (Сб) 0:26

Не за что.
Действительно полезная штука :), но иногда доводит до
Код: Выделить всё
AddHandler Parts(Q).AddToLog, (Function(I As Integer) Sub(Str As String) RaiseEvent AddToLog(I, Str))(Q)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.12.2011 (Сб) 0:37

Admiralisimys писал(а):Переводчик http://www.developerfusion.com/tools/convert/csharp-to-vb/ предложил несобирающийся вариант

Интересно, что если преобразовывать из
Код: Выделить всё
lnk.LinkClicked += () => Process.Start("Some Site");
то получается
Код: Выделить всё
lnk.LinkClicked += Function() Process.Start("Some Site")

Кстати, в твоём случае правильнее Sub, а не Function.


Вернуться в C#

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 27

    TopList