Какой лучший конвертер С# в VB.net?

При поиске в Интернете решения для моих проблем с VB.net я часто нахожу полезные статьи по определенной теме, но код написан на C#. Это не большая проблема, но потребовалось некоторое время, чтобы преобразовать его в VB вручную. Есть некоторые сайты, которые предлагают конвертеры кода из C# в VB и наоборот, но исправление всех недостатков после преобразования кода занимает почти столько же времени, сколько и самостоятельная работа.

До сих пор я использую http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

Вы знаете что-то лучше?


person Florian    schedule 17.09.2008    source источник
comment
Закрыта, поэтому мы никогда не узнаем, есть ли она лучше, чем в 2008 году.   -  person kjack    schedule 03.11.2015
comment
ILSpy работает на меня в 2016 году. Почти то же самое, что и принятый ответ Reflector.   -  person mcfea    schedule 29.01.2016
comment
Всем, кто приземлится здесь, я использую Econ Netvert в течение многих лет, и большую часть времени он работает без сбоев и офлайн. Просто убедитесь, что вы выбрали ICSharp 4.0 из списка поставщиков (вверху справа). Обратите внимание, что он не обрабатывает некоторые новые языковые конструкции (лямбда-выражения, анонимные функции, объединение с нулевым значением), но в остальном работает нормально в 95% случаев. Работает в обоих направлениях (C# ‹-› VB.NET), а также может обрабатывать целые проекты. Обратите внимание, что проект больше не поддерживается.   -  person dotNET    schedule 23.11.2017


Ответы (13)


Если вы не можете найти хороший конвертер, вы всегда можете скомпилировать код C# и использовать дизассемблер в Reflector для просмотра кода Visual Basic. Некоторые имена переменных изменятся.

person Hallgrim    schedule 17.09.2008
comment
К сожалению, декомпилятор в VB в Reflector довольно глючный. Часто вы получаете код, который компилируется, но дает разные результаты. Попробуйте это в качестве теста для оценки преобразователей кода: double x = 3 / 2; двойной у = 3,0/2; int z = (int) (-3,5); x должен быть равен 1,0 (многие конвертеры создают код, который дает x=1,5), y должен быть 1,5, z должен быть -3 (многие конвертеры создают код, который дает z=-4) - person Daniel; 31.07.2009
comment
Примечание: чтобы увидеть проблемы, о которых я упоминал в Reflector, вам нужно использовать временные переменные, иначе компилятор C# оптимизирует вычисления, и ошибка в Reflector не сработает. - person Daniel; 31.07.2009

У Telerik есть хороший конвертер, основанный на SharpDevelop, который хорошо зарекомендовал себя на протяжении многих лет, хотя и не обновлялся годами (поскольку он основан на SharpDevelop).

Недавно я наткнулся на преобразователь на основе roslyn как хорошо. Я не знаю, насколько хорошо он работает и насколько хорошо он поддерживается, но, поскольку он имеет открытый исходный код, вы всегда можете его разветвить и обновить по мере необходимости.

person Darren Kopp    schedule 17.09.2008
comment
У этого есть удобная опция для загрузки zip-файла с исходным кодом, а затем загрузки zip-файла со всеми преобразованными файлами и отчетом об ошибках преобразования. - person Dave Anderson; 26.08.2011
comment
Он больше не конвертирует комментарии! Нет поддержки обратной связи - person Eric Schneider; 29.12.2017
comment
пожалуйста, смотрите мои правки @eschneider. может быть, новый будет работать лучше для вас. - person Darren Kopp; 02.01.2018
comment
Только что попробовал еще раз, теперь вообще не работает. System.NotSupportedException: NotInheritableKeyword не поддерживается! - person Eric Schneider; 02.01.2018
comment
Несколько других проблем, которые я вижу: коллекции vb.net .Item(0) терпит неудачу, .ToString терпит неудачу Примечание отсутствует (). nameof не работает Проблемы с регистром, другие подобные этому, массивы vb.net и проблемы с массивами С# () против [] и межстрочный интервал не поддерживается - person Eric Schneider; 02.01.2018
comment
версия roslyn работает, но комментариев пока нет - person Eric Schneider; 02.01.2018
comment
Упомянутый вами преобразователь SharpDevelop также имеет расширение Visual Studio, которое намного точнее. поскольку он использует контекст проекта. - person Graham; 28.04.2018

SharpDevelop имеет встроенный переводчик между C# и VB.NET. Не идеальная мысль (например, необязательные значения в VB.NET не имеют эквивалента в C#, поэтому сигнатура метода конвертера должна быть отредактирована), но вы можете сэкономить некоторое время, так как вы выполняете все операции внутри IDE. а не веб-страница (скопируйте код С#, вставьте, нажмите кнопку, скопируйте код VB.NET, вставьте в IDE: P)

person Ricardo Amores    schedule 17.09.2008

В настоящее время я использую эти два чаще всего:

http://converter.telerik.com/

http://www.carlosag.net/tools/codetranslator/

Но также добились определенного успеха с этими другими:

http://converter.atomproject.net/

http://www.dotnetspider.com/convert/Csharp-To-Vb.aspx

http://www.developerfusion.com/tools/convert/csharp-to-vb/

person StarLordBlair    schedule 15.11.2012

Я думаю, что лучше всего изучить другой язык в достаточной степени, чтобы вы могли переписывать его вручную, в некоторых аспектах есть довольно сложные различия, с которыми я не уверен, что конвертер справится очень хорошо. Например, сравните мой перевод с C# на VB следующего:

public class FileSystemEventSubscription : EventSubscription
{
    private FileSystemWatcher fileSystemWatcher;

    public FileSystemEventSubscription(IComparable queueName, 
        Guid workflowInstanceId, FileSystemWatcher fileSystemWatcher) : base(queueName, workflowInstanceId)
    {
        this.fileSystemWatcher = fileSystemWatcher;
    }

становится

Public Class FileSystemEventSubscription
    Inherits EventSubscription  
    Private myFileSystemWatcher As FileSystemWatcher
    Public Sub New(ByVal QueueName As IComparable, ByVal WorkflowInstanceID As Guid, ByVal Watcher As FileSystemWatcher)
        MyBase.New(QueueName, WorkflowInstanceID)
        Me.myFileSystemWatcher = Watcher
    End Sub

C# взят из примера Custom Activity Framework, и я боюсь, что потерял ссылку на него. Но он содержит какое-то неприятно выглядящее наследование (с точки зрения VB).

person Community    schedule 22.09.2008
comment
Если вы поместите свой пример в roslyncodeconverter.azurewebsites.net, он преобразуется так же, как и ваша рукописная версия (за исключением того, что вы изменили названия вещей в своей поделке) - person Graham; 28.04.2018

Я использую бесплатный подключаемый модуль Visual Studio 2012 с именем Language Convert

Он отлично работает на 2010/2012, к сожалению, еще не работает на VS 2013.

Преобразование не на 100% точное, но определенно очень полезное, запустить его в первый раз немного сложно, проверьте перед изображением ниже: введите здесь описание изображения

person Fernando Vezzali    schedule 07.05.2014

Последнее, что я проверял, у SharpDevelop есть один, и он тоже с открытым исходным кодом.

person GEOCHET    schedule 17.09.2008

Вы можете загрузить свою DLL или EXE в .Net Reflector от Redgate (ранее Lutz Roeder). , выберите свой метод, а затем нужный язык из списка языков. Код выбранного метода будет отображаться на выбранном языке.

Надеюсь, это поможет.

person Germstorm    schedule 27.09.2008

Вы можете попробовать этот конвертер. Существует функциональность для C# для VB и VB для C#.

Надеюсь это поможет.

person Ivan Baev    schedule 28.03.2012

У Карлоса Агилара Мареса уже около 40 лет есть онлайн-конвертер — Переводчик кода < strong>но я согласен, что Reflector — лучший ответ.

person MotoWilliams    schedule 17.09.2008

Не отвечая на ваш вопрос, скажу, что я был в похожей ситуации.

Я понял, что примеры кода на C# были неуклюжими, когда я действительно начинал с .NET, но через несколько недель после начала моего первого проекта (после того, как я ближе познакомился с платформой .NET и самой VB.NET) я обнаружил, что это было интересно, а иногда и полезно реконструировать код C#. Не только с точки зрения синтаксиса, но и изучения тонких различий в подходах — в этом отношении полезно быть непредубежденным.

Я придерживаюсь VB.NET по мере того, как узнаю все больше и больше о фреймворке, но вскоре я перейду на C# с намерением стать «многоязычным».

person CJM    schedule 18.09.2008

В настоящее время я использую плагин для VS2005, который нашел на CodeProject (http://www.codeproject.com/KB/cs/Code_convert_add-in.aspx); он использует внешний сервис (http://www.carlosag.net/Tools/CodeTranslator/) выполнить перевод.

Иногда, когда я не в сети, я использую инструмент преобразования (http://www.kamalpatel.net/ConvertCSharp2VB.aspx).

person Davide    schedule 22.09.2008
comment
Ссылки 1 и 3 не работают. - person Fernando Gonzalez Sanchez; 09.05.2014

Один на http://www.developerfusion.com/tools/convert/csharp-to-vb/ (новый URL-адрес) теперь поддерживает синтаксис .NET 3.5 (еще раз спасибо ребятам из #develop) и автоматически копирует результаты в буфер обмена :)

person Community    schedule 27.09.2008