Microsoft.VisualBasic.dll的妙用and 改善C#公共程序类库质量的10种方法
Microsoft.VisualBasic.dll的妙用(开发中肯定会用到哦)
前言
做过VB开发的都知道,有一些VB里面的好的函数在.NET里面都没有,而Microsoft.VisualBasic.dll却给我们提供使用这些函数的功能(没用过VB的这些功能一样可以使用,大同小异而已)
今天这里主要讲两个:一个是繁简转换,另一个是计算时间差,相信大家都有方法实现这两个功能,而我今天讲的却是只各需一句代码就实现这两个功能!
功能一:繁简转换
首先需要引用Microsoft.VisualBasic.dll,废话不多说直接上代码

using Microsoft.VisualBasic; string str="悲梦"; //简体转繁体
str=Strings.StrConv(str, VbStrConv.TraditionalChinese, 1033); //繁体转简体
str=Strings.StrConv(str, VbStrConv.SimplifiedChinese, 1033);

String.StrConv 的說明:
第一个参数是待转换的字符串;
第二个参数是欲转换的字体的枚举值;
第三个参数是文字转换后,最后对应的编码格式(LocaleID);
1028 繁体中文
1033 ASCII
2052 简体中文
為何不管繁体转简体还是简体转繁体我都用 1033 呢?
首先,要先知道,有些简体中文的编码值是在繁体中文中对应不到任何字的。此时,显示的字就会是 "?" 号。
因为 2052 的 「 国] 已经是简体字了,转换到繁体时,刚好其编码对应不到1028 的编码,因此会是问号。
最好的方式,是以 en-US(美国) 作为编码格式。当以 en-US 作为最后的编码格式后,又遇到亚洲字时,就会以 unicode 作为储存编码格式。此时刚好与 .net 的 string 储存格式相同。这样就解决了问题!
因此,当我们在做繁简转换时,请将第三个参数都设成 1033
功能二:时间差计算
相信大家都有计算两个时间的时间差,有可能是计算相差的天数、小时、分钟、秒,这些我们都可以通过一句代码来实现,先上代码
using Microsoft.VisualBasic; //可以得到dt=50
long dt = DateAndTime.DateDiff(DateInterval.Hour, DateTime.Now, DateTime.Now.AddHours(50));
DateAndTime.DateDiff说明:
第一个参数是需要得到的时间差的形式的枚举值;可以是天数,小时,分钟,秒数等 第二个参数就是减的时间值; 第三个参数就是被减的时间值;
结束语
以上两个功能看起来都很简单,但是如果不借助Microsoft.VisualBasic.dll的话实现起来还是挺麻烦的,用以上的方法实现起来既方便又准确!大家觉得好的话,推荐一下哦!
改善C#公共程序类库质量的10种方法
最近重构一套代码,运用以下几种方法,供参考。
1 公共方法尽可能的使用缓存
public static List<string> GetRegisteredCompany()
{
String sql = "SELECT CompanyCode FROM dbo.Company WHERE Suspended='N' ORDER BY CompanyCode";
DataTable table = SqlHelper.ExecuteDataset(BaseCommon.GetSystemConnectionStringBuilder().ConnectionString, sql).Tables[0];
return (from item in table.AsEnumerable()
select item.Field<string>("CompanyCode")).ToList();
}
这个方法返回的值,可能会被多个地方用到。应该把这个方法的值缓存起来,供程序多次使用。
2 使用NArrange格式化代码,这个工具,可以将代码格式化,用region分隔开来。
NArrange 0.2.9.0
____________________________________________________________
Copyright (C) 2007-2009 James Nies and NArrange contributors.
All rights reserved.
http://www.NArrange.net
Zip functionality courtesy of ic#code (Mike Krueger, John Reilly).
经过格式化之后,如上图所示,被分成几个区域,看起来条理更清晰。
3 查找重复的代码,提取到公共方法库中。
关于查找程序中重复的代码,有如下工具可以检测重复的代码
1) Simian http://www.harukizaemon.com/simian/
2) Team City http://www.jetbrains.com/teamcity/
3) Resharper plugin AgentRalph http://agentralphplugin.googlecode.com/
4) DevExpress CodeRush
5) Resharper Find Similar Code 查找相似的代码
6) CCFinder
7) Duplo http://sourceforge.net/projects/duplo/
8) Visual Studio 2012
9) Clone Detective for Visual Studio http://www.codeplex.com/CloneDetectiveVS
10) Atomiq http://getatomiq.com
11) NDepend http://www.ndepend.com/
12) CloneDR http://www.semanticdesigns.com/Products/Clone
工具相当多,如果使用VS2012开发,已经内置此功能。
4 增加测试代码,测试各种情况下公共代码的功能是否正确。
[TestMethod]
public void EmpLicenseTestMethod()
{
DateTime expired=new DateTime(2013,12,1);
string licensee = "Administrator";
string company="Microsoft Corporation";
string license=GenerateLicense(expired, licensee, company); //保存许可文件
XmlDocument doc = new XmlDocument();
doc.LoadXml(license);
SaveFileDialog dlg = new SaveFileDialog();
dlg.RestoreDirectory = true;
dlg.Filter = "License file (*.lic)|*.lic|All files (*.*)|*.* ";
if (dlg.ShowDialog() == DialogResult.OK)
{
doc.Save(dlg.FileName);
}
}
Visual Studio内置的Test工具与技术,再配合Resharper的工具,测试一个方法相当容易实现。
5 应用改善效率的代码替换不合适的代码,或是应用.NET框架的方法重写自定义的方法。
效率改善代码,如下举例
1 不要用string ax=”” 判断ax是否为空, ax.Length==0的效率高于ax==string.Emptyu 一般用as.IsNullorEmpty
2 对于不改变的变量,用常量代替
3 用Linq代替大量的foreach查询
4 MyType t=(MyType) t和t as MyType的效率比较,后者效率好,而且转换失败后不会抛出异常
5 List<T> 代替Array ,Haset<T> ,Dictionary<K,V> 代替Hashtable
.NET的内置的方法,string.Join可以将字符串数组连接成由一个分隔符号连接的一个字符串。比如
例如,如果 separator 为“,”且 value 的元素为“apple”、“orange”、“grape”和“pear”,则 Join(separator, value) 返回“apple, orange, grape, pear”。
如果 separator 为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing),则改用空字符串 (Empty)。
这个方法,我们常常自己实现。应该改用.NET内置的方法。
6 使用并行技术改善系统效率
Parallel.ForEach可以充分利用多核的,提供系统性能。对于一些不需要考虑对数据的前后顺序操作的地方,均可以用这个方法改善。比如删除临时文件。对于需要考虑操作顺序的数据,比如清空数据表数据,要先清除子表,再删除主表,否则会引起外键冲突。应当用lock锁定要删除的数据表,提取出数据后,再进行删除。
7 使用Linq和Lambda表达式改善系统的写法
对于只有几行的方法,可以用Lambda来替代。如果方法很通用,可以写成通用的方法。对DataTable的循环遍历操作,首选Linq技术,可减少出错的机率,也使代码简化。
8 字符串操作
简单的操作不改变,复杂的匹配与查找改用正则表达式,同时要考虑Encoding的问题。
9 公共方法的提取与扩展方法
static类型的公共方法如果过多,因为GC无法回收内存,会影响系统的效率。可以考虑用扩展方法替代,编译时直接被替换为原始类型的静态方法调用。一般添加扩展方法的类型为.NET系统类型,自定义的类型添加扩展方法很少。
10 尽量多的给方法注释
使用vsDocman工具,尽可能的为公共方法书写注释,添加用例
Microsoft.VisualBasic.dll的妙用and 改善C#公共程序类库质量的10种方法的更多相关文章
- 改善C#公共程序类库质量的10种方法
最近重构一套代码,运用以下几种方法,供参考. 1 公共方法尽可能的使用缓存 public static List<string> GetRegisteredCompany() { Str ...
- 改善C#公共程序类库质量的10种方法和工具
最近重构一套代码,运用以下几种方法,供参考. 1 公共方法尽可能的使用缓存 public static List<string> GetRegisteredCompany() { Str ...
- 改善C#公共程序类库质量的10种方法(转)
出处:http://www.cnblogs.com/JamesLi2015/p/3140897.html 最近重构一套代码,运用以下几种方法,供参考. 1 公共方法尽可能的使用缓存 public s ...
- Microsoft.VisualBasic.dll的妙用(开发中肯定会用到哦)
前言 做过VB开发的都知道,有一些VB里面的好的函数在.NET里面都没有,而Microsoft.VisualBasic.dll却给我们提供使用这些函数的功能(没用过VB的这些功能一样可以使用,大同小异 ...
- Microsoft.VisualBasic.dll内置的判断变量类型的一系列实用方法
今天意外读到一线码农的一篇文章<挖一挖C#中那些我们不常用的东西之系列(2)--IsXXX 系列方法>,文章中讲到 Microsoft.VisualBasic.dll 里面的Informa ...
- 在Microsoft Power BI中创建地图的10种方法
今天,我们来简单聊一聊“地图”. 在我们日常生活中,地图地位已经提升的越来越高,出门聚餐.驾驶.坐车.旅行......应运而生的就是各种Map APP. 作为数据分析师,我们今天不讲生活地图,要跟大家 ...
- 【转自CSDN】深入 Microsoft.VisualBasic.Strings.StrConv 簡繁轉換
深入 Microsoft.VisualBasic.Strings.StrConv 簡繁轉換 昨天又遇到一個簡繁轉換的需求, 雖然這個問題以前已經處理過了, 但是以前是用自己建立的 b52gb 和 gb ...
- 未能加载文件或程序集 Microsoft.VisualBasic.PowerPacks.Vs, Version=10.0.0.0 解决 亲测
项目打开winform程序做的某些窗体时报错: ************* 异常文本 ************** System.Reflection.TargetInvocationExceptio ...
- WPF使用Microsoft.VisualBasic创建单例模式引起的权限降低问题
在进行WPF开发时,总是在找更加优雅去写单例模式的代码. 很多人都喜欢用Mutex,一个App.cs下很多的Mutex,我也喜欢用. 看完<WPF编程宝典>的第七章Applicaton类后 ...
随机推荐
- ENode 2.0
ENode 2.0 - 介绍一下关于ENode中对Command的调度设计 摘要: CQRS架构,C端的职责是处理从上层发送过来的command.对于单台机器来说,我们如何尽快的处理command呢? ...
- $.each()遍历Json对象
1.遍历JavaScript数组对象: var json = [ //中括号起始 {"id":"1","tagName":"app ...
- 宏观CMS-->功能体系结构内容管理系统
CMS,Content Management System,一个非常普通的站点内容管理系统.本文章旨在从一定的高度把CMS的功能概念做一个分解论述 ,希望读者能够有所感. 1.前台 前台是站点中给 ...
- 快速构建Windows 8风格应用29-捕获图片与视频
原文:快速构建Windows 8风格应用29-捕获图片与视频 引言 本篇博文主要介绍Windows 8中相机的概念.捕获图片与视频的基本原理.如何实现捕获图片与视频.相机最佳实践. 一.相机 关于相机 ...
- CSS3自适配手机屏幕[转]
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- solr连接数据库
solr与.net系列课程(三)solr连接数据库 solr与.net系列课程(三)solr连接数据库 上一章直接讲述的配置文件把大部分人看的很迷惑,大家都想听的是solr到底是怎么用的,好,这 ...
- jenkins+svn+gradle自动化部署笔记
自己虚拟机jekins配置:(jenkins+svn+gradle)自动化部署,1.linux配置好jdk,解压tomcat,将 jenkins.war翻到webapps目录下.2.系统管理-管理用户 ...
- The Decoder - UVa458
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva458.html 题目描述 The ...
- Dynamics CRM 提示“操作无效”
今天打开一个许久没用的CRM学习环境发现出现下面的错误.顿时感觉到莫名其妙.(貌似CRM的所有错误都让人感觉到莫名其妙) 于是查看系统日志,错误如下: Current key (KeyType : C ...
- WinForm媒体播放器
媒体播放控件(Windows Media Player )的常用属性和方法,并且利用它设计一个简单的媒体应用程序——媒体播放器.该媒体播放器可以播放 wav.avi.mid 和 mp3 等格式的文件. ...