2008-09-17 23 views
39

Mientras busco en el interweb una solución para mis problemas de VB.net, a menudo encuentro artículos útiles sobre un tema específico, pero el código es C#. Eso no es un gran problema, pero cuesta algo de tiempo convertirlo a VB manualmente. Hay algunos sitios que ofrecen convertidores de código de C# a VB y viceversa, pero para corregir todos los defectos después de la conversión de código es casi tan lento como hacerlo por mí mismo en primer lugar.¿Cuál es el mejor conversor de C# a VB.net?

Hasta ahora estoy usando http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

¿Conoce algo mejor?

+8

cerrado, así que nunca sabremos si hay es mejor que en 2008 – kjack

+0

ILSpy me está funcionando en 2016. Más o menos lo mismo que la respuesta aceptada de Reflector. – mcfea

+0

Cualquiera que aterrice aquí, he estado usando [Econ Netvert] (https://econnetvert.codeplex.com/) por años y funciona sin problemas la mayor parte del tiempo y está ** fuera de línea **. Solo asegúrese de seleccionar ** ICSharp 4.0 ** de la lista de proveedores (arriba a la derecha). Tenga en cuenta que no maneja algunas de las construcciones de lenguaje nuevas (lambdas, funciones anónimas, nulo-coalescente), pero de lo contrario funciona bien el 95% del tiempo. Funciona en ambos sentidos (C# <-> VB.NET) y también puede manejar proyectos completos. Tenga en cuenta que el proyecto ya no se mantiene. – dotNET

Respuesta

16

Si no puede encontrar un buen convertidor, siempre puede compilar el código C# y usar el dispersador en Reflector para ver el código de Visual Basic. Algunos de los nombres de las variables cambiarán.

+6

Desafortunadamente, el decompilador de VB en Reflector es bastante defectuoso. A menudo terminará con código que compila, pero produce resultados diferentes. Pruebe esto como un caso de prueba para evaluar los convertidores de código: double x = 3/2; double y = 3.0/2; int z = (int) (- 3.5); "x" debería ser 1.0 (muchos convertidores producen código que resulta en x = 1.5), y debería ser 1.5, z debería ser -3 (muchos convertidores producen código que resulta en z = -4) – Daniel

+0

Nota: para ver el Problemas que mencioné en Reflector, necesita usar variables temporales, de lo contrario, el compilador C# optimiza el cálculo y no se desencadena el error en Reflector. – Daniel

20

Telerik tiene a good converter basado en SharpDevelop que ha funcionado bastante bien en los últimos años, aunque no se ha actualizado en años (debido a que se basa en SharpDevelop).

Me he encontrado recientemente con roslyn based converter as well. No sé qué tan bien funciona ni qué tan bien conservado está, pero como es de código abierto, siempre puede bifurcarlo y actualizarlo según sea necesario.

+0

Esto tiene una opción útil para cargar un archivo comprimido de origen y luego descargar un archivo zip con todos ellos convertidos y un informe de error de conversión. –

+0

¡Ya no convierte comentarios! No hay soporte de comentarios – eschneider

+0

por favor vea mis ediciones @eschneider. tal vez el nuevo funcione mejor para ti. –

12

SharpDevelop tiene un traductor incorporado entre C# y VB.NET. No es perfecto (por ejemplo, los valores opcionales en VB.NET no tienen un equivalente en C#, por lo que la firma del método del convertidor debe ser editada), pero puede ahorrar algo de tiempo, ya que está realizando todas las operaciones dentro de un IDE y no una página web (# código de copia C, pegar, golpear el botón, copiar el código VB.NET, pegar en IDE: P)

3

Carlos Aguilar Mares ha tenido un convertidor en línea durante unos 40 Forevers - Code Translator, pero estoy de acuerdo que Reflector es la mejor respuesta.

2

Mientras no conteste su pregunta, diré que he estado en una posición similar.

Me di cuenta de que los ejemplos de código en C# eran incómodos cuando estaba comenzando en .NET, pero unas semanas después de mi primer proyecto (después de que me familiaricé con .NET Framework y VB.NET), descubrió que era interesante y, a veces, beneficioso tener que aplicar ingeniería inversa al código C#. No solo en términos de sintaxis, sino también aprendiendo acerca de las diferencias sutiles en el enfoque, es útil tener una mente abierta en este sentido.

me quedo con VB.NET a medida que aprendo más y más sobre el marco, pero en poco tiempo voy a mojar mi a en C# con la intención de convertirse en 'multilingüe'.

11

Creo que lo mejor que puede hacer es aprender lo suficiente del otro idioma para que pueda volver a escribir a mano, hay algunas diferencias bastante difíciles en ciertos aspectos que no estoy seguro de que un convertidor pueda manejar muy bien.Por ejemplo, comparar mi traducción de C# a VB de los siguientes:

public class FileSystemEventSubscription : EventSubscription 
{ 
    private FileSystemWatcher fileSystemWatcher; 

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

convierte

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 

El C# es de la muestra Marco actividad personalizada, y me temo que he perdido el enlace lo. Pero contiene una herencia desagradable (desde el punto de vista VB).

3

Puede cargar el archivo DLL o EXE en Redgate (anteriormente Lutz Roeder's) .Net Reflector, seleccione su método y luego el idioma deseado del combo de idioma. El código del método seleccionado se mostrará en el idioma seleccionado.

Espero que esto ayude.

2

Puedes probar este converter. Hay funcionalidad para C# a VB y VB a C#.

Espero que esto ayude.

5

Estoy utilizando una conexión de Visual Studio 2012 plug-in llamado Language Convert

Funciona perfectamente en 2010/2012, por desgracia no funciona en VS 2013 todavía.

La conversión no es fiable al 100%, pero es sin duda muy útil, para poner en marcha por primera vez es un poco complicado, comprobar antes de la siguiente imagen: enter image description here

Cuestiones relacionadas