2008-09-17 105 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年爲我工作。幾乎與接受的Reflector答案一樣。 – mcfea 2016-01-29 16:47:34

+0

任何人在此登陸,我一直在使用[Econ Netvert](https://econnetvert.codeplex.com/)多年,並且大多數時間都能順利運行,並且正在**脫機**。只要確保從提供者列表(右上角)中選擇** ICSharp 4.0 **。請注意,它不處理一些新的語言結構(lambdas,匿名函數,空合併),但在95%的時間內工作正常。雙向工作(C#<-> VB.NET),也可以處理整個項目。請注意,該項目不再維護。 – dotNET 2017-11-23 08:53:20

回答

16

如果找不到優秀的轉換器,可以隨時編譯c#代碼並使用Reflector中的編譯器來查看Visual Basic代碼。一些變量名稱將會改變。

+6

不幸的是,Reflector中的VB反編譯器相當麻煩。通常你會得到編譯代碼,但會產生不同的結果。 試試這個作爲測試用例來評估代碼轉換器: 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。我不知道它的工作效果如何,或者它的維護情況如何,但是因爲它是開源的,你可以隨時分叉並根據需要進行更新。

12

SharpDevelop在C#和VB.NET之間有一個內置的轉換器。不完美的想法(例如,VB.NET中的可選值在C#中沒有等價物,因此必須編輯轉換器方法的簽名),但是您可以節省一些時間,因爲您正在IDE中進行所有操作而不是一個網頁(複製C#代碼,粘貼,點擊按鈕,複製VB.NET代碼,粘貼到IDE:P)

3

卡洛斯·阿吉拉爾母馬已經有一個在線轉換器約40 forevers - Code Translator但我會同意反射器是更好的答案。

2

雖然沒有回答你的問題,但我會說我一直處於類似的位置。我發現C#中的代碼示例在我剛開始使用.NET時非常尷尬,但在第一個項目(在我對.NET框架和VB.NET本身更熟悉之後)進入了幾個星期後,我意識到發現有必要對C#代碼進行反向工程是有趣的,有時也是有益的。不僅在語法方面,還要了解方法中細微的差異 - 在這方面開放思想很有用。

隨着我越來越多地瞭解框架,我堅持使用VB.NET,但不久之後,我將傾向於轉向C#,目的是成爲「多語言」。

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#是從自定義活動框架示例,我怕我已經失去了聯繫到它。但它包含一些令人討厭的繼承(從VB角度來看)。

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