• 高质量代码(一)


    高质量代码(一)

     一、Parse与TryParse

      我们以Int32为例,首先看一下Int32提供的Parse和TryPase方法:

      

      从Parse和TryParse方法上我们可以看出它们之间的主要区别在于:如果Prase转换失败则会直接抛出异常;而TryParse在转换失败的时候会返回false,并且将out的Int32值设置为0.

      如果我们要使用Parse方法来处理任意字符串转换为Int32类型时,则要编写如下代码:

    View Code
    1 string str= ...;
     2 Int32 value;
     3 try
     4 {
     5     value = Int32.Parse(str);
     6 }
     7 catch (Exception)
     8 {
     9     value = 0;
    10 }

      代码量与TryParse相比多了许多,接下来我们来测试看两者之间的性能问题,代码如下:

    View Code
     1 Int32 count = 1000;
     2 string strValue = "123";
     3 Int32 intValue;
     4 
     5 Stopwatch sw = Stopwatch.StartNew();
     6 sw.Start();
     7 for (int i = 0; i < count; i++)
     8 {
     9     Int32.Parse(strValue);
    10 }
    11 sw.Stop();
    12 Console.WriteLine("Int32.Parse(\"{0}\") => {1}", strValue, sw.Elapsed);
    13 
    14 sw.Restart();
    15 sw.Start();
    16 for (int i = 0; i < count; i++)
    17 {
    18     Int32.TryParse(strValue, out intValue);
    19 }
    20 sw.Stop();
    21 Console.WriteLine("Int32.TryParse(\"{0}\") => {1}", strValue, sw.Elapsed);
    22 
    23 strValue = "a123";
    24 
    25 sw.Restart();
    26 sw.Start();
    27 for (int i = 0; i < count; i++)
    28 {
    29     try
    30     {
    31         Int32.Parse(strValue);
    32     }
    33     catch (Exception) { }
    34 }
    35 sw.Stop();
    36 Console.WriteLine("Int32.Parse(\"{0}\") => {1}", strValue, sw.Elapsed);
    37 
    38 sw.Restart();
    39 sw.Start();
    40 for (int i = 0; i < count; i++)
    41 {
    42     Int32.TryParse(strValue, out intValue);
    43 }
    44 sw.Stop();
    45 Console.WriteLine("Int32.TryParse(\"{0}\") => {1}", strValue, sw.Elapsed);

      得出的结果:

      二、枚举值

      我们在编码当中经常会用到枚举,大多数情况下我们都是不会主动去给枚举添加任何默认值的,因为C#默认会给枚举赋值,然而当定义如下枚举时:

    复制代码
    1 enum MyEnum
    2 {
    3     A = 1,
    4     B = 2,
    5     BC,
    6     C = 3
    7 }
    复制代码

      此时的BC是什么值呢?首先编写测试代码来看看吧:

    MyEnum myEnum = MyEnum.BC;
    Console.WriteLine(Convert.ToInt32(myEnum));

      输出的结果竟然是:3

      于是又编写了如下测试代码:

    MyEnum myEnum = MyEnum.BC;
    Console.WriteLine("{0} = {1} => {2}", myEnum, MyEnum.C, myEnum == MyEnum.C);

      返回竟然是:true

      原因是编译器会给枚举元素逐个+1,当它发现BC并没有默认值的时候,编译器会在B的基础上+1并赋值给BC,因此BC=3,而枚举类型是值类型,因此有了以上的答案。

     
     
    分类: C#
  • 相关阅读:
    命名函数
    匿名函数
    Elixir基础
    Elixir特性
    linux下安装erlang
    更具先序、中序遍历生成二叉树
    第一章 TCP/IP协议族
    React Native开发之expo中camera的基本使用
    Vue中异步组件(结合webpack,转载)
    vue中将html字符串转换成html后的一些问题
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3007489.html
Copyright © 2020-2023  润新知