2008-09-17 5 views
39

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

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

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

+8

Закрыты поэтому мы никогда не будем, если знаем, лучше, чем в 2008 году. – kjack 2015-11-03 07:57:14

+0

ILSpy работает для меня в 2016 году. Довольно же то же, что и принятый рефлекторный ответ. – mcfea 2016-01-29 16:47:34

+0

Любой, кто приземлился здесь, я использую [Econ Netvert] (https://econnetvert.codeplex.com/) целую вечность, и он работает гладко большую часть времени и ** автономно **. Просто убедитесь, что вы выбрали ** ICSharp 4.0 ** из списка поставщиков (вверху справа). Обратите внимание, что он не обрабатывает некоторые новые языковые конструкции (lambdas, анонимные функции, null-coalescing), но в остальном работает отлично в 95% случаев. Работает в обоих направлениях (C# <-> VB.NET) и может обрабатывать все проекты. Обратите внимание, что проект больше не поддерживается. – dotNET 2017-11-23 08:53:20

ответ

16

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

+6

К несчастью, декомпилятор VB в Reflector довольно глючит. Часто вы получите код, который компилирует, но дает разные результаты. Попробуйте это как тестовый пример для оценки преобразователей кода: double x = 3/2; double y = 3,0/2; int z = (int) (- 3.5); «x» должно быть 1,0 (многие преобразователи производят код, который приводит к x = 1,5), y должно быть 1,5, z должно быть -3 (многие преобразователи производят код, который приводит к z = -4) – Daniel 2009-07-31 19:27:06

20

Telerik имеет a good converter, который основан на SharpDevelop, который работал довольно хорошо с годами, хотя он не обновлялся годами (из-за того, что он основан на SharpDevelop).

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

4

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

12

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

3

Карлос Агилар Mares был онлайн конвертер для около 40 Forevers - Code Translator, но я согласен, что Отражатель - лучший ответ.

2

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

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

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

2

В настоящее время я использую плагин для 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).

11

Я думаю, что самое лучшее, что нужно сделать, это узнать больше о другом языке, чтобы вы могли переписать вручную, в некоторых аспектах есть некоторые довольно сложные различия, которые я не уверен, что конвертер будет работать очень хорошо.Например, сравнить мой перевод с 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# от образца Пользовательской активности Framework, и я боюсь, что я потерял связь к нему. Но он содержит некоторое неприятное видение наследования (с точки зрения VB).

1

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

3

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

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

2

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

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

5

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

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

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