如何构建高质量的C#代码?细节决定成败,做好细节才能使你的代码更加整洁、高效
1、起个好名字
变量名:通常采用“驼峰命名”法,即变量首字母小写,后面的单词首字母大写;
解决方案名称:通常每个单词首字母都大写
常量名称:字母统一大写,每个单词用下划线隔开来
2、准确适用float/double/decimal三个数据类型
float:有效数字为小数点后六位
double:有效数字为小数点后16位
decimal:有效数字非常精细
所以使用数据类型的时候,应该注意防止数据的丢失
3、整数类型是计算机中处理速度最快的数据类型
在平时编写过程中,可以将某些字符串的比较,bool类型的比较转化为整型数据的比较,从而提高代码速度
4、字符串的处理
4.1 转义字符,通常文件路径、字符串带有转义字符的时候,需要加反斜杠 如|:string str=“Tom:\"Hi ! Jerry\"”; // Tom:"Hi ! Jerry"
这个时候,我们可以通过逐字字符串@符号,在字符串前面加一个@符号,这个字符串就叫逐字字符串 如:string path=@"C:\Windows";
4.2 字符串的大量拼接,可以使用StringBulider类来操作字符串(可以有效提高效率)
eg: StringBulider sb=new StringBuilder(200);//需指定长度。指定长度可以提高代码运行效率,如未指定长度,需先计算内存,再分配空间,这样就会耗费一定时间
for(int i=0;i<100;i++)
{
sb.append("append string");
}
String是不可改变的,每次使用System.String类中的方法之一时,都会在内存中创建一个新的字符串对象,这样会使得系统开销非常大,如果不是想创建新的内存对象,只想对一个字符串进行操作,可以使用SringBuilder以此提升性能;
StringBuilder是一个可变字符串,设置可容纳的最大字符数之后,当容量达到时,自动分配新的内存空间且容量翻倍
4.3 字符串的比较方法 String.compare(exp1,exp2,exp3);//exp1,exp2为需要比较的两个字符串,第三个参数为bool类型,是指:是否忽略大小写
4.5 字符串还有一些其他常用的方法,如 substring()//截取字符串 split()//把字符串分割为多个字符串 Join()将字符串组合合并成为一个字符串
5 数据类型转换(datetime 类型是结构体类型 结构体是值类型)
5.1显式转换,又称强制类型转换
目标变量=(目标类型)原数据;
如,将一个float数据转为int类型,那么要考虑以下几个问题
①小数点后数据丢失
②是否需要做溢出检查(checked()方法)
③是否使用unchecked运算符 确保转换成功
5.2隐式类型转换
5.3使用tryParse()方法进行数据转换,每一种值类型都包含tryParse()方法(推荐使用)
string source="12";
int target;
if(int.tryParse(source,out target)==true)
{
console.writeline("转换成功,结果为:{0}",target);
}
else
{
console.writeline("转换失败");
}
5.4 使用Convert类,定义于system命名空间。在使用Convert在进行数据类型转换时应该注意,讲数值转化为数值时,如果字符串的内容不能转换成为相应的类型,将会产生FormatException异常,所以应该尽量使用tryParse()方法来代替
5.5 object为所有类型的基类,但是不能作为万能类型。
因为它是引用类型,进行数据处理时,会发生装箱和拆箱操作,对性能会有较大影响,所以
①我们应当尽量使用枚举(enum)、结构(struct)、类来封装数据。
②减少发生装箱拆箱操作。
③使用泛型
6 常量的使用
C#中,当使用常数符号const时,编译器首先从定义常数的模块的元数据中找出该符号,并直接取出常数的值,然后将之嵌入到编译后产生的IL代码中,所以常数在运行时不需要分配任何内存,当然也就无法获取常数的地址,也无法使用引用了。
7. C#数据类型
object是所有数据类型的基类
值类型(继承object类型的子类:System.ValueType,存储在栈上):包括 基本类型(sbyte、short、Int、long、char、float、double、bool等)、结构类型(struct)、枚举类型(enum)
引用类型(数据存放的地址存储在栈上,实际数据存储在堆上):类(class),字符串(string)、数组、接口(interface)、delegate委托、object
8. string str=" ";和string str=null的区别?
前者分配长度为空字符串的内存空间,后者是不分配内存空间的。
本文由作者原创,如有引用、转载请注明出处。(如有不正之处,欢迎指出,相互交流,谢谢!)