构建高质量的C#代码

如何构建高质量的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的区别?

    前者分配长度为空字符串的内存空间,后者是不分配内存空间的。

本文由作者原创,如有引用、转载请注明出处。(如有不正之处,欢迎指出,相互交流,谢谢!)

posted on 2017-03-15 16:34  拯&救  阅读(111)  评论(0编辑  收藏  举报