(转) 将VB.NET网站转换成C#的全过程

在学习URL重写过程中碰到个是VB写的源码,看起来总是不爽的就GOOLE了下 感觉这个文章写的不错

原文地址 http://www.cnblogs.com/cngunner/archive/2006/01/16/318309.html

前两天看到一个比较不错的网站,可惜是用vb.net写的,俺弄不大明白,于是心血来潮想把它全部转换成C#代码的。花了N长时间,问了几多人,费了不少神,总算是能让网站在C#下马马虎虎的跑了,不小心还喜欢蹦出个鲜红夺目的错误信息,真是让人战战兢兢。

 总结的经验教训就是:没事别再这么干了,有这些闲功夫不如把这两种语言都弄懂,或者把网站重写。大家看看我转化的详细过程,估计也会知难而退的。
一、代码转化的几种方式
1、通过工具直接转化
第一款:VB.net to C# Converter
            VB.net to C# Converter是一款离线转换软件,安装简单,提供试用版,而且试用版永不过期,但是试用版只能翻译不超过600行源码的工程。VB.net to C# Converter将用户的VB.net项目用C#语言重新编写,同时变量名、注释行都被保留下来。它具有完备的功能,提供专业的报告生成工具,而且能够对转换过程中的错误生成错误记录,并且在此基础上提供错误分析和提供修改建议。总之,它是一款充分为使用者考虑的,功能完备的转换工具。
它提供多种类型工程的转换,包括Windows Forms 工程、Console 工程、Windows Control 库、Web Control 库、Web Services工程、Windows Service 工程。提供多种形式的转换,包括单一工程、多个工程、交互式代码转换、命令行形式转换。大多数的VB 函数都能转换为相应的 C# 功能,而且注解等也能得到很好的转换。可以使用向导,并提供在线帮助。转换准确率高达99%。
但是,它不支持中文,中文注解会生成乱码。完整版需要购买。(宋立桓老师)
正式版本收费在100美元左右,好像只能对工程文件进行转换,我手头的代码没有工程文件,没用这个软件。
第二款:Convert Assistant
这款口碑也不错,看人家的介绍:
Our assistant will help you to translate all your VB.NET projects to C#. She does this in a very textual way. Therefore, you don't need to have any references or additional components on your computer. As long as the syntax is correct, she'll be pleased to help you. Next thing you know, your source code has becomesharp and crystal-clear!
    好像也不提供免费,有钱的大淫,可以买来玩玩。
第三款 TransKing for Visual Studio .NET

 

Price:
 
EUR 133.40 / USD 149.00 
Shipment:
 
Full version in an e-mail attachment
Platform:
 
.NET VS.NET 2002 or VS.NET 2003
Version:
 
1.56

 

 
 
 
 
 
自称是市面上最好的VB & VB.net into C#工具,我反正是没用过,149美元能买多少馅饼、火腿肠、方便面啊,要是都换成白面馒头,可有一大车呢。
另外贴一款VB.NET to C# 的工具地址,这类解决方案较多,就不赘述了。
2、在线WebService调用
    微软最有价值专家的解决方案,网上有多家BLOG介绍过,他的C# to VB.NET开发的相当成功,国内有款转换软件叫“WebServiceDemo.exe”,就是调用他的引用。后来推出的VB.NET to C#版本,名气虽大,就是经常不能用。
3、在线转换服务
将转换逻辑封装在服务器上,你把代码Ctrl+C上去,点“转换”,人家就把转换好的代码给你显示在页面上。
Developer fusion
使用方便,而且免费。只是目前正在试用阶段,转换后程序错误较多,并且在转换后的代码里不包含注释,这是因为转换后的代码在返回之前,首先被翻译为抽象树,而目前的这种树状结构把注释都忽略了。(宋立桓老师)
另一款http://www.icsharpcode.net/,这个不怎么样。
二、vb.net与c#的风格转化
1、大小写
怎么说好呢,vb.net是对大小写不敏感的,而C#恰恰相反,大多数转换后的代码还是小写,所以工作量就来了,啥也不用说了,改吧。
常用的:.Replace、SqlConnection、ConfigurationSettings.AppSettings、SqlDataAdapterDataTable、Selected、.SelectedItem、DataSet、DataColumn、DataSource、DataColumn()、.Tables、.Fill.DataBind()、.ColumnName、.DataType、.Add、.Rows、.Count、System.Type.GetType、.ToString()……….
2、用法
Vb.net很多地方的用法和C# 不同,没办法,还得手工改,比如:
Mid-----------------------------------------à.Substring()
Trim----------------------------------------à.Trim()
Len------------------------------------------à.Length()
page.ispostback()-------------------------àPage.IsPostBack
Session("")---------------------------------àSession[""]
dt.rows(i).item("abc")--------------------àdt.Rows[i]["abc"]
ds.tables("abc")---------------------------àds.Tables["abc"]
.items(i). ----------------------------------à.Items[i]
改的时候用DW整目录一搜,出来8000多条记录,都得手工逐条改,进度非常慢。后来请教了Ectotherm,改用正则匹配,速度快多了。
不过复杂的语句还是要靠手工修改,正则很难构造,而且经常匹配出错。
EmEditor.exe对字符正则查找替换支持的非常好,强烈推荐。(有点像中插广告)
回想起那段往事,真是没事找事。
3、函数
在下VB.NET可以使用的许多函数和方法到了C#就不灵了,比如IsNumeric再比如isdbnull,都改成这份上了,总不能半途而废吧,请教谷坤的结果就是自己写一个 Isnumeric然后在页面中调用。
这点倒不用着急,已经有好事者帮咱们做好了。
IsNumeric in C#, WHY NOT?
具体方法是构建一个func.inc,然后在每个调用IsNumric方法的页面添加
<!-- #include file="../func.inc" -->,func.inc代码如下:
public static bool IsNumeric(object Expression)
{
      bool isNum;
      double retNum;
      isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any,System.Globalization.NumberFormatInfo.InvariantInfo, out retNum );
      return isNum;
}
三、与格式转化相关的网站资料     1、VB.net与C#对照表,包括以下方面
 
    2、From VB.NET to C# and Back Again     Darren Neimke和Scott Mitchell撰写的,有关VB.net 和C#代码互转的专作。
    3、C# to VB.NET Translator,如何转化C#为VB.NET指导类文章。
四、专家意见
哈哈,搬出专家的意见更显得有说服性,下面是我请教微软MVP宋立桓老师后,他给出的指导性、建设性和前瞻性意见,软件说明部分我作了直接引用:
我只能提供方法和原则,首先你可以全面了解两种语言的语法和构造的差别,并可以通过一门语言学习另外一门语言。其次,也可以使用些转换软件,不过,至今却还没有一种工具能够实现100%的无差错转换。因为,大多数的转换软件都是基于字面和语法的转换,而不是基于程序逻辑的转换,所以程序转换过程中就可能因为程序逻辑不被理解而发生错误。因此使用工具转换后我们还是要进行测试和少量修改的,同时了解一定的C#和VB.net的语法和它们之间的差别对我们还是很有好处的。如果采用手工转换,那么C#和VB.net之间的语法对照表可能对你有用,可以参考以下网址:http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html。
一些注意点:
(1) C#中引用比较和值的比较都使用“==” 关键字,而VB.net 使用“is”关键字做引用比较,
(2) C#中字符连接符和加法运算符都使用“+”
(3) VB.net是大小写不敏感的,
(4) 注释有时不能加载到正确位置
五、小结
呵呵,是不是挺麻烦的,反正我是不愿再参与类似的事情了。
我刚开始学习.net技术,渴望有多多的高手带我,也希望认识更多的喜欢.net的朋友。
感谢宋老师的无私帮助。
 
 
posted @ 2015-01-06 07:34  wanshutao  阅读(1702)  评论(0编辑  收藏  举报