zoukankan      html  css  js  c++  java
  • .NET基础示例系列之五:泛型

    泛型较为广泛地被讨论,这里写到的只是作为新手的入门级认识。

    泛型最常应用于集合类。

    泛型的一个显而易见的优点在于可以在许多操作中避免强制转换或装箱操作的成本或风险,拿ArrayList这个集合类来说,为了达到其通用性,集合元素都将向上转换为object类型,对于值类型,更是有装箱拆箱的成本:

    static void Main(string[] args)

    {

    ArrayList al = new ArrayList();

    al.Add(1);

    }

    IL中是:

    IL_0008:  ldc.i4.1

    IL_0009:  box        [mscorlib]System.Int32

    IL_000e:  callvirt   instance int32 [mscorlib]System.Collections.ArrayList::Add(object)

    box操作就是装箱,具体过程是把值类型从栈中弹出,放入堆中,同时把在堆中的地址压入到栈中,频繁出现这样的操作,成本比较大。


    所以在

    2.0中,遇到以上的应用,应该使用泛型集合类List<T>

    static void Main(string[] args)

    {

        List<int> l = new List<int>();

        l.Add(1);

    }

     

    另一个比较常用的泛型集合类是Dictionary<T,T>,用于保存键值对:

    static void Main(string[] args)

    {

        Dictionary<int, string> dict = new Dictionary<int, string>();

        dict.Add(1, "SomeBook1");

        dict.Add(2, "SomeBook2");

        dict.Add(3, "SomeBook3");

     

        Console.WriteLine(dict[2]);//output:SomeBook2

        dict[2] = "SomeCD1";//modify

        Console.WriteLine(dict[2]);//output:SomeCD1

     

        dict.Remove(2);//delete

     

        foreach (KeyValuePair<int, string> kv in dict)

        {

            Console.WriteLine("Key = {0}, Value = {1}",kv.Key, kv.Value);

        }

    }

  • 相关阅读:
    ffmpeg full help
    docker 服务命令
    php 查看swoole版本
    vue/cli 的启动
    TP框架的使用,不需要阿帕奇
    mysql 的文件恢复
    mac下使用iterm实现自动登陆
    跨库怎样查询
    swoole和websocket的关系
    mac上mysql的安装和使用
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/486807.html
Copyright © 2011-2022 走看看