• (5)不断深入的C#


    这节课学到了应用很广泛的正则表达式,它在C#中同样起到了很好的通配作用,下面来看个例子。

    我们先创造了一个正则实例,然后用它处理了一个字符串,AppendFormt是处理复合格式字符串的方法,返回的字符串追加到此实例。

    这是一个匹配的字符串,并且返回字符串长度。体现了正则表达式的基本作用。查了些资料,了解了正则表达式的一些相关知识:

    在C#中new一个Regex对象的时候,第二个参数能够用枚举支持选择匹配模式,现在就来说说这些枚举值对正则的影响。

       模式              说明

       .SingleLine           点号能够匹配任何字符
       .Multiline            扩展^和$的匹配,使^和$能够匹配字符串内部的换行符
       .IgnorePatternWhitespace   设计宽松排列和注释模式
       .IgnoreCase          进行不区分大小写的匹配
        .ECMAScript          限制\w \s \d,令其只对ASCII字符有效
       .RightToLeft          传动装置的驱动过程不变,但是方向相反(从字符的末尾开始,向开头移动)
       .Compiled           多花些时间优化正则表达式,编译到dll里,占用多点内存,但是匹配更快。
       .ExplicitCapture        普通括号()在正常情况下是捕获型括号,但是在此模式下与(?:...)一样,之分组,不捕获

    Regex有两种方法Match(),Matches()其中Match()方法中有个Groups能包含所有Match找到的Group。

    string string1 = "04:03:27 127.0.0.0 LibertyAssociates.com " +
          "04:03:28 127.0.0.0 foo.com " +  “04:03:29 127.0.0.0 bar.com ";
      // group time = one or more digits or colons followed by space
      // group ip address = one or more digits or dots followed by space
      // group site = one or more characters,  \S:any none space characters
       Regex theReg = new Regex(@"(?<time>(\d|\:)+)\s"
                 +@"(?<ip>(\d|\.)+)\s" + @"(?<site>\S+)");
       // get the collection of matches
       MatchCollection theMatches = theReg.Matches(string1);
        foreach (Match theMatch in theMatches)
       {// iterate through the collection
            if (theMatch.Length != 0)
           {
              Console.WriteLine("\ntheMatch: {0}", theMatch.ToString());
              Console.WriteLine("time: {0}“, theMatch.Groups["time"]);
              Console.WriteLine("ip: {0}“, theMatch.Groups["ip"]);
              Console.WriteLine("site: {0}“, theMatch.Groups["site"]);
            }
        }

    用这种方法可以将字符串的各个部分划归出来,解决了有时需要同时导入多个信息的问题。

    接下来让我们探讨下运用windows 异步API的问题,这里我们要用到两个关键字:async ,await

    public async Task<int> ExampleMethodAsync()
    {
       var httpClient = new HttpClient();
       int exampleInt = (await
                       httpClient.GetStringAsync("http://msdn.microsoft.com")).Length;

       ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n";
       return exampleInt;
    }
    这里使用的await关键字,代表调用异步接口并等待返回结果后才执行后面的代码。这个函数在定义时用了一个关键字:async,这是因为在此函数中至少有一个地方用了await关键字,那么这个函数就必须定义为async。在外面调用这个函数的时候也就可以用await关键字了,例如:

    bool result = await ExampleMethodAsync();

    同样的,上面这行代码所在的函数,也必须声明async关键字。其实调用异步API的时候,也可以不用写这两个关键字,但是代码的执行顺序会发生变化,返回结果类型也变了。

    今天还要跟大家介绍一点关于数据类型转换的东西:int.parse(),int.Tryparse()和Convert.ToInt32().它们的作用相似,却有着很大的差别。Convert.ToInt32 适合将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]);  int.Parse适合将string类类型转换成int类型,如int.Parse(session["shuzi"].ToString()),

    int.TryParse(input, out i)

    第一个参数为要转化的值,第二个参数为输出值,如果转换失败,输出值为 0,如果转换成功,输出值为转换后的int值

    关于int.TryParse(input, out i),该表达式转换成功返回 true,转换失败返回 false。

    针对于浮点型的取舍问题,浮点型只有Convert.ToInt32()和(int)能进行转换,但是也是进行取舍了 的,Convert.ToInt32()采取的取舍是进行四舍五入,而(int)则是截取浮点型的整数部分,忽略小数部分,例如 Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而 (int)1.5d还是返回1;

    Convert.ToInt32(double value) 如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为 4,而 5.5 转换为 6。  不过4.6可以转换为5,4.4转换为4 

    一点小小的学习心得,有嘛错误请大家指正。。

  • 相关阅读:
    单页面应用 之 项目中集成插件vue-router
    公共组件的创建和使用
    数据库初识
    MySQL的安装 --windows版本
    多线程补充以及协程
    多线程(三)
    多线程(二)
    多线程(一)
    多进程(二)
    多进程(一)
  • 原文地址:https://www.cnblogs.com/shenyuelong/p/4440482.html
Copyright © 2020-2023  润新知