zoukankan      html  css  js  c++  java
  • C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)

    常用类库StringBuilder

    StringBuilder高效的字符串操作
    当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作。
    String 对象是不可变的。 每次使用 System. String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。 在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常大。 如果要修改字符串而不创建新的对象,则可以使用 System.Text. StringBuilder 类。 例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。 
    StringBuilder  != String//将StringBuilder转换为String.用ToString();
    StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换为String.
    StringBuilder sb = new StringBuilder();
    sb.Append();//追加字符串
    sb.ToString();//把StringBuilder转换为字符串。
    sb.Insert();
    sb.Replace();


    List<T>泛型集合

    List<T>是C#中一种快捷、易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性。

    1、List<T>用法

    (1)创建一个List<T>泛型集合对象实例
    List<T> list = new List<T>();// T 为列表中元素的类型
    
    List<string> mlist = new List<string>();//创建了一个 string 类型的集合

     

    (2)以一个集合作为参数创建新的泛型集合对象实例
    string[] strArr ={"1","2","3","4","5"};
    List<string> strList =List<string>(strArr);//把数组作为参数新建一个string类型集合

     

    2、添加元素到List<T>

    (1)添加一个元素
    strList.Add("Hello");//把一个字符串添加到strList集合中
     
    (2)添加一组元素集合
    string[] strArr ={"1","2","3","4","5"};
    strList.AddRange(strArr);//把数组添加到集合中,数组也可以理解为一个有限长度的集合
     
    (3)在指定位置添加要添加的元素
    Insert(int index, T item);//index 为要添加元素的位置
    以下示例:
    strList.Insert(1,"萨瓦迪卡");//在集合中第1个元素后面的位置插入一个元素

     

    3、泛型集合的遍历

    可以使用 foreach 循环轻松遍历 List<T> 中的所有元素,示例:
    foreach(string s in strList)
    {
        Console.WriteLine(s);//输出遍历到的元素的值
    }
     
     
     

    Dictionary<K , V>  键值对集合

     
     
     
    下面是对于Dictionary的一些常用的操作,包括遍历,添加,删除等
     
    (1)新建一个Dictionary<Keys ,Values>  键值对集合
    //新建一个键是int类型 ,值是 string类型的键值对集合
    Dictionary<int,string> dictionary =newDictionary<int,string>();

     

    (2)往键值对集合添加数据
    //注意:这里的键可以是声明类型的范围的任意值,不必按照顺序,会跟stirng类型的值相对应
    dictionary.Add(1,"张三");
    dictionary.Add(21,"李四");
    dictionary.Add(33,"王五");
    dictionary.Add(4,"赵六");

     

    (3)遍历键值对集合的Keys(键)和Values(值)
    foreach(KeyValuePair<int,string> kvp in dictionary)
    {
        //输出遍历到的键值对集合元素的键和值
        Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);
    }
     
    (4)遍历Keys(键)
    foreach(int j in dictionary.Keys)
    {
        //输出遍历到的键值对元素的键
        Console.WriteLine("key={0},value={1}", j, dictionary[j]);
    }
     
    (5)遍历Values(值)
    //遍历Values
    foreach(string item in dictionary.Values)
    {
        //输出遍历到的Values(值)
        Console.WriteLine("value:{0}", item);
    }
     
     
    (5)判断键值对集合是否包含某个Keys(键)
    //判断是否包含 2 这个键,返回bool类型,true则包含
    if(dictionary.ContainsKey(2))
    {
        //输出这个键所对应的值
        Console.WriteLine(dict[2]);
    }
    1.装箱、拆箱必须是: 值类型→引用类型  或  引用类型→值类型。
                object,接口。值类型是可以实现接口。
                Person p=new Student();//这个叫隐式类型转换,不叫装箱。
                Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。
                int类型为什么能装箱到object类型,但不能装箱到string类型或Person类型,
                因为object类型是int类型的父类。 
    2.拆箱时,必须用装箱时的类型来拆箱
                装箱时如果是int,拆箱必须用int,不能用double
    
    
     3.方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。
    int n=10; Console.WriteLine(n);//没有发生装箱,因为方法重载。
    
    ==============================
    1.以下代码进行了几次装箱?(3次装箱,1次拆箱,注意数字与字符串相加,最终调用的是string.Contact())
    int n = 10;
    object o = n;
    n = 100;
    Console.WriteLine(n + "," + (int)o);
    Console.ReadKey();
    //通过Reflector查看,并说明为什么?
    


  • 相关阅读:
    leetcode100
    leetcode237
    leetcode171
    leetcode122
    leetcode387
    2018-8-10-win10-uwp-如何打包Nuget给其他人
    2018-8-10-win10-uwp-如何打包Nuget给其他人
    2019-11-13-如何在国内发布-UWP-应用
    2019-11-13-如何在国内发布-UWP-应用
    2019-2-21-PowerShell-通过-WMI-获取设备厂商
  • 原文地址:https://www.cnblogs.com/CSharpLover/p/5193693.html
Copyright © 2011-2022 走看看