在学习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. 武汉科技大学ACM:1005: 单位转换

    Problem Description BobLee最近在复习考研,在复习计算 机组成原理的时候,遇到了一个问题.就是在计算机存储里面的单位转换.我们都知道1MB=1024KB,1KB=1024B,1 ...

  2. HashTable 及应用

    HashTable-散列表/哈希表,是根据关键字(key)而直接访问在内存存储位置的数据结构. 它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列函数,存放记录的数组叫 ...

  3. delphi列表视图组件(TListView)使用方法|实例

    TListView 组件以多种形式显示列表的项目,如详细资料.小图标.大图标等形式表示列表中的项目.    列表视图与用TListBox 组件实现的列表框非常相似.不同的是,列表视图可以让用户选择不同 ...

  4. js实现数组内元素随机排序

    其实蛮容易实现的,关键是简洁与否,下面是我自己写的. function randomSort(a){ var arr = a, random = [], len = arr.length; for ( ...

  5. 成功启动了Apache却没有启动apache服务器

    原因没有用管理员身份运行...

  6. 一次awk脚本的重构

    # 脚本功能说明: # . 检查URL中的域名是否是指定版本的域名 # . 对访问bid,authorid的游客身份排重,并累加其pv # 全局变量说明 # DOMIAN_LIST 是数组,key是要 ...

  7. [LeetCode 112 113] - 路径和I & II (Path Sum I & II)

    问题 给出一棵二叉树及一个和值,检查该树是否存在一条根到叶子的路径,该路径经过的所有节点值的和等于给出的和值. 例如, 给出以下二叉树及和值22: 5         / \       4  8  ...

  8. [转载]memcached stats 命令

    STAT pid 1552 STAT uptime 3792 STAT time 1262517674 STAT version 1.2.6 STAT pointer_size 32 STAT cur ...

  9. Android 5.0 之SwipeRefreshLayout

    金田 下拉刷新是一种比较常用的效果,Android 5.0之前官方并未提供类似的控件,App中主要是用的第三方库,例如PullToRefresh,ActionBar-PullToRefresh等.刚好 ...

  10. 兼容ie6/ff/ch/op的div+css实现的圆角框

    <!DOCTYPE html> <html> <head> <title>青春不迷茫:寻梦时代的“蚁族”逆袭之旅- 职场管理专题-中国人力资源开发网-中 ...