C#学习记录:编写高质量代码改善整理建议4-8


本文摘自PHP中文网,作者php是最好的语言,侵删。

4、TryParse比Parse好

下面的TryParse的方法定义

1

public static bool TryParse(string s, out Double result);

Parse如果转换失败会报错,但是TryParse有返回值可以判断是否转换成功

1

2

3

4

5

string str1 = "abfc12";

if(double.TryParse(str1, out double dou1))

{

    Console.WriteLine(dou1);

}

5、建议使用int? 来确保值类型也可以为null

如果有需要值类型为空,我们可能会使用一个特殊值例如 -1 来判断int是不是为空,最好改成int?类型,判断是否为null

1

2

3

4

5

6

7

8

Nullable<int> i1 = 4;

// i2 和 i1 的定义方式一样 只是写法不同 下面的int?是一个语法糖

int? i2 = null;

int i3 = 0;

//int类型可以默认转为int?类型

i2 = i3;

//int?类型需要强转成int类型,如果是null则变为0

i3 = (int)i2;

6、区别readonly和const的使用方法

简单区别就是const效率高,readonly灵活性高

const是编译器常量,readonly是运行时常量

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

const int constNum = 1;

public string name;

public int age;

public FirstType()

{

    name = "aa";

    age = constNum;

    age = 1;

}

//使用以上代码测试,下面的编译成的IL代码

  IL_0000:  ldarg.0

  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()

  IL_0006:  nop

  IL_0007:  nop

  IL_0008:  ldarg.0

  IL_0009:  ldstr      "aa"

  IL_000e:  stfld      string CSharpSuggest.FirstType::name

  IL_0013:  ldarg.0

  IL_0014:  ldc.i4.1

  IL_0015:  stfld      int32 CSharpSuggest.FirstType::age

  IL_001a:  ldarg.0

  IL_001b:  ldc.i4.1

  IL_001c:  stfld      int32 CSharpSuggest.FirstType::age

  IL_0021:  ret

可以看出13,14,15 和 1a,1b,1c是一样的,所以 age = constNum;和 age = 1;是等效的 所以效率最高

const只能修饰基元类型、枚举类型或字符串类型,readonly则没有限制

const天然是static 不能再增加static

readonly的值一般在构造函数里面赋值,每一个类的对象都可以拥有不同的readonly值,但由于const是静态的,所以所有的类该值都是一样的

1.png

书中有上面这一句话,我一直有个疑问,在类内赋值和构造函数赋值有什么区别,网上没搜到,反编译出来的IL代码仅仅是变量定义的顺序区别,如果有知道请告知。。

7、将0作为枚举的默认值

我理解的是如非必要,不要更改枚举的数值,可能会出现意料之外的结果

8、避免给枚举类型元素提供显示的值

原因同上

相关文章:

C#学习记录:编写高质量代码改善整理建议1-3

C#学习记录:编写高质量代码改善整理建议9-15

以上就是C#学习记录:编写高质量代码改善整理建议4-8的详细内容!

相关阅读 >>

C#与vb.net混合开发测试的详细介绍(图文)

详细介绍C#读取xml多级子节点

详解C#使用xsd文件验证xml格式是否正确的实现方法

C#如何将datatable中的列名复制到另一个datatable

C#中dataset的用法

C#新建datacolumn类时type类型参数的生成方式的示例代码详解

C# windowsapi应用之getdesktopwindow-获得桌面所有窗口句柄的方法详解

C#开发实例-订制屏幕截图工具(三)托盘图标及菜单实现的图文介绍

C#二进制字节数组操作函数 截取字节数组subbyte的示例代码

C#是什么?有什么用?

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...