在学习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的朋友。
感谢宋老师的无私帮助。
 
 

(转) 将VB.NET网站转换成C#的全过程的更多相关文章

  1. https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题

    一:什么是https SSL(Security   Socket   Layer)全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安 ...

  2. 【转】https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题

    正需要这个,写的很好,就转过来了 转自: http://www.cnblogs.com/naniannayue/ 一:什么是https SSL(Security   Socket   Layer)全称 ...

  3. PC网站转换成手机版

    博客地址:https://www.cnblogs.com/zxtceq/p/5714606.html 一天完成把PC网站改为自适应!原来这么简单! http://www.webkaka.com/blo ...

  4. http网站转换成https网站

    https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题   一:什么是https SSL(Security   Socket  ...

  5. [日常工作]虚拟机或者实体机转换成HyperV虚拟机的方法

    1.环境种类比较多, 有vb的 vm的还有人想直接用hyperV的 毕竟docker 是一个趋势, win10 上面 安装了hyperV 启用docker 角色之后 安装vb和vm的话 就没法启用CP ...

  6. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  7. VB中将INT型转换成STRING和从STRING转换成INT型的函数

    CStr 函数示例本示例使用 CStr 函数将一数值转换为 String. Dim MyDouble, MyStringMyDouble = 437.324   ' MyDouble 为 Double ...

  8. ASP.Net中实现上传过程中将文本文件转换成PDF的方法

    iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们 ...

  9. Java Keytools 证书转换成Openssl 的PEM 文件或keytools 导出私钥文件

    上一遍又说到Godaddy 生请证书流程与操作: 现因使用Incapsula 防护使用到https,在添加网站时需要自定义证书,其中需要上传私钥信息,因公钥是能过keytool 生成所以需要导出私钥信 ...

随机推荐

  1. ios视图切换之push与present混用

    在变成过程中,经常遇到两个视图控制器之间的切换,导航控制器即UINaVigation是最常用的一种,有时为了某些效果又需要进行模态切换,即present. 我们的布局经常是在window上加一个nav ...

  2. datagrid公用字段扩展

    easyui 1.3.5扩展 datagrid 控件 扩展公用段 把 (9082行) var opts = $.data(_698,"datagrid").options; 改成 ...

  3. linux 目录说明

    1./bin /usr/bin  /usr/local/bin   都是放置用户可执行二进制文件. 2./boot 主要是放置liunx系统启动时用到的文件. 2./dev   文件夹内主要是西东外设 ...

  4. python反射机制

    http://blog.163.com/yang_jianli/blog/static/161990006201382241223156/ http://www.jb51.net/article/54 ...

  5. Beforeunload打点丢失原因分析及解决方案

    淘宝的鱼相在 2012 年 8 月份发表了一篇文章,里面讲述了他们通过一个月的数据采集试验,得到的结果是:如果在浏览器的本页面刷新之前发送打点请求,各浏览器都有不同程度的点击丢失情况,具体点击丢失率统 ...

  6. Jquery 学习插件第一天

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  7. Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止,我们只是介绍了正则表达式的一部分功能.在这一篇中,我们会学习到一些新的元字符,然后再教大家如何使用组来获得被匹配的部分文本. 更多元字符 还有一些元字符我们没有讲到,接下来 ...

  8. EDIT编辑框

    编辑框 编辑框的主要作用是让用户输入文本,例如要求用户在编辑框中输入密码的文本. .基础知识 编辑框里的文本可以是单行,也可以是多行,后者的风格取值为 ES_MULTILINE.一般对于多行文本编辑框 ...

  9. 创建Windows服务简单流程

    1.首先打开VS2010(或者其他版本),创建Windows服务项目 2.创建完成后切换到代码视图,代码中默认有OnStart和OnStop方法执行服务开启和服务停止执行的操作,下面代码是详细解释: ...

  10. iOS 定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等授权检测

    金田 iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Cras ...