读改善c#代码157个建议:建议1~3
目录:
- 建议一:正确操作字符串
- 建议二:使用默认转型方法
- 建议三:区别对待强制转型和as
建议一、正确操作字符串
1、确保尽量少的装箱
static void Main(string[] args)
{
int indexNo = ;
int dbNo = ; string text = "I-" + indexNo + "D" + dbNo; Console.WriteLine("IndexNo:{0},DBNo:{1}", indexNo, dbNo); Console.ReadKey();
}
我们知道值类型转引用类型会产生装箱操作,装箱操作—为值类型在托管堆中分配内存以及类型对象指针和同步块索引的内存,将值类型拷贝到新分配的堆内存中,最后返回这个对象的地址。
反面:
string text = "I-" + indexNo + "D" + dbNo;
Console.WriteLine("IndexNo:{0},DBNo:{1}", indexNo, dbNo);
正面:
string text = "I-" + indexNo.ToString() + "D" + dbNo.ToString();
Console.WriteLine("IndexNo:{0},DBNo:{1}", indexNo.ToString(), dbNo.ToString());
2、避免分配额外的内存空间
String类型是特殊的引用类型,它一旦赋值就不可改变。我们所调用的"="或者"+"进行拼接都会创建一个新字符串。
反面:我们实际创建了4个string对象
string text = "I-" + indexNo.ToString() + "D" + dbNo.ToString();
正面:
使用:StringBuilder对象
StringBuilder strder = new StringBuilder();
strder.Append("I-");
strder.Append(indexNo.ToString());
strder.Append("D-");
strder.Append(dbNo.ToString()); string text = strder.ToString();
根据 asdshit 的建议补充,这一点确实不知道,被忽略了:
StringBuilder()对象默认分配的空间是16字符。当空间满了之后,会再分配16个字符空间。
所以说如果我们可以正确估计我们的数据的字符总长度。正确的设定初始空间,这样,使得StringBuilder不必频繁地开辟分配空间。也避免大量的空间被浪费
使用:String.Format()方法
String.Format("I-{0}D-{1}", indexNo.ToString(), dbNo.ToString());
建议二、使用默认转型方法
1、类型转换运算符:强制转换
int indexNo = ; float f = (float)indexNo;
2、使用类型内置转换方法
Parse、TryParse 或者 ToString(),TodateTime
3、使用帮助类System.Convert提供的方法
建议三、区别对待强制转型与as和is
基类转型为子类本身使用as.
子类和子类之间的转型应该是提供转换操作符。
1、强制转型:
- 两个类型之间通过支持强制转型操作符来完成两个类型之间的转型。
- 两个类属于从属继承关系。
第一种情况:类型实现强制转换
class FirstType
{
public string Name { get; set; }
} class SecondType
{
public string Name { get; set; }
public explicit operator SecondType(FirstType firstType)
{
SecondType st = new SecondType() { Name = "转型自:" + firstType.Name };
return st;
}
FirstType ft = new FirstType();
ft.Name = "First"; SecondType st = (SecondType)ft; Console.WriteLine(st.Name);
第二种情况:继承关系:强制转换或者as 都行。
读改善c#代码157个建议:建议1~3的更多相关文章
- 读改善c#代码157个建议:建议4~6
目录: 建议4:TryParse比Parse好 建议5:使用int?确保值类型也可以为null 建议6:区别 readonly 和 const 的用法 一.建议4:TryParse比Parse 好 T ...
- 读改善c#代码157个建议:建议13~15
目录: 建议13:为类型输出格式化字符串 建议14:正确实现浅拷贝和深拷贝 建议15:使用dynamic来简化反射实现 一.建议13:为类型输出格式化字符串 有些类型需要我们根据业务需求提供字符串的格 ...
- 读改善c#代码157个建议:建议10~12
目录: 建议10:创建对象时需要考虑是否实现比较器 建议11:区别对待==与Equals 建议12:重写Equals时也要重写GetHashCode 一.建议10:创建对象时需要考虑是否实现比较器 比 ...
- 读改善c#代码157个建议:建议7~9
目录: 建议7:将0值作为枚举的默认值 建议8:避免给枚举类型的元素提供显示的值 建议9:习惯运算符重载 一.建议7:将0值作为枚举的默认值 允许使用的枚举类型有:byte.sbyte.short.u ...
- 编写高质量代码改善程序的157个建议:第87个建议之区分WPF和WinForm的线程模型
今天有时间了,继续<编写高质量代码改善程序的157个建议>的阅读,当我阅读到建议87的时候,里面的一些代码示例和文中所说的不一致了,是不是我现在用的是NetFramework 4.0的缘故 ...
- 编写高质量代码改善java程序的151个建议——导航开篇
2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,慘不忍睹是吧.确实 ...
- 编写高质量代码:改善Java程序的151个建议 --[117~128]
编写高质量代码:改善Java程序的151个建议 --[117~128] Thread 不推荐覆写start方法 先看下Thread源码: public synchronized void start( ...
- Github即将破百万的PDF:编写高质量代码改善JAVA程序的151个建议
在通往"Java技术殿堂"的路上,本书将为你指点迷津!内容全部由Java编码的最佳 实践组成,从语法.程序设计和架构.工具和框架.编码风格和编程思想等五大方面,对 Java程序员遇 ...
- 每周一书-编写高质量代码:改善C程序代码的125个建议
首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...
随机推荐
- OCP读书笔记(18) - 空间管理
OLTP 表压缩 压缩始终是非常占用CPU的过程,并且需要花费一定时间,通常,如果压缩数据,则数据必须解压缩后才能使用.虽然此要求在数据仓库环境中是可以接受的但在OLTP环境中可能无法接受 现在,在O ...
- tarjan+缩点
B - Popular Cows Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Su ...
- Javascript 设计模式 辛格尔顿
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/30490955 我一直很喜欢Js,,,今天写JsSingleton模式来实现,以及 ...
- ecshop2.7.3怎么自动清除缓存
1.在ecs_shop_config表中插入一条数据 进入ECSHOP后台-数据库管理-SQL查询 复制下面SQL,粘贴到里面执行.注意这时是默认表前缀ecs_,如果你的修改过要和你的统一了. INS ...
- Windows Phone开发(12):认识一下独具个性的磁贴
原文:Windows Phone开发(12):认识一下独具个性的磁贴 对"磁贴"的理解是一点也不抽象的,为什么呢?只要你愿意启动WP系统,无论你是在模拟器中还是在真机中,是的,桌面 ...
- gopkg:一种方便的go pakcage管理方式
在使用go的过程中,我们有时候会引入一些第三方库来使用,而通常的方式就是使用go get,可是这样的方式有一个非常严重的问题,假设第三方库更新了相关接口,非常有可能你就无法使用了,所以我们一套非常好地 ...
- Ubuntu下用NdisWrapper安装网卡驱动
下面是一个简单全面的使用NdisWrapper的指南.这是从Beginning Ubuntu Linux, Second Edition中提炼出来的. 这份指南是第8章的一部分.该章给出了在Ubunt ...
- 看PHP在内部迭代的动作
以下我们来了解怎样实现一个自己定义的迭代器,然后再開始慢慢理解迭代器的内部工作原理.先来看一个官方的样例: <? php class myIterator implements Iterator ...
- Windows IOT
Windows IOT 开发入门(准备工作) 终于抽出空来了,将最近研究的东西记录下来,物联网,万物皆可联网.然后可以做到智能家居,智能生活,智能城市....一大堆.吹牛的就不说了. 在实际应用中 ...
- C#实现远程机器管理
原文:C#实现远程机器管理 目前处于待离职状态,原先所有的工作都在进行交接,过程当中不乏有很多先前整理的和动手尝试实现的功能:我的主页中已经列出来一部分内容,有兴趣的可以前往看一看. 接下来的内容主要 ...