当前位置: 首页 > article >正文

C#-泛型

List<T>

集合赋值,不能直接new_list = old_list,都是指向同一个地址

List<string> old_list = new List<string>();
List<string> new_list = new List<string>(old_list);

 集合、数组转换,ToList()、ToArray()   

list.AddRange(array);将数组直接添加到集合

list.RemoveAt(2);按照索引删除

Dictionary<K,V>

初始化,通过key获得对象,遍历key,遍历value

Dictionary<string, Student> s = new Dictionary<string, Student>
{
    ["first"] = new Student("tom", 1),
    ["second"] = new Student("jack", 2)
};

Console.WriteLine(s["first"]);//输出的是对象
Console.WriteLine(s["first"].name);

foreach (string item in s.Keys)
    Console.Write(item + " ");

Console.WriteLine();

foreach (Student item in s.Values)
    Console.Write(item.ToString() + " ");

泛型方法/类

namespace test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(add<int, int, int>(1,2));

            MyList<string> stringList = new MyList<string>();
            stringList.Add("string1");
            stringList.AddRange(new string[] { "string2", "string3" });
            stringList[1] = "aaa";
            Console.WriteLine(stringList.Length + stringList[1]);
        }
        static T add<T, T1, T2>(T1 a,T2 b) where T:struct, T1, T2
        {
            dynamic num1 = a;
            dynamic num2 = b;
            return num1 + num2;
        }
    }
    class MyList<T>
    {
        private List<T> list = new List<T>();
        //索引器
        public T this[int index]
        {
            get { return list[index]; }
            set { list[index] = value; }
        }
        public int Length
        {
            get { return list.Count; }
        }
        public void AddRange(T[] item)
        {
            list.AddRange(item);
        }
        public void Add(T item)
        {
            list.Add(item);
        }
    }
}

default

会自动根据引用类型或值类型赋默认值

class Program
{
    static void Main(string[] args)
    {
        MyClass<int, string> m = new MyClass<int, string>();
    }
    
}
class MyClass<T1, T2>
{
    private T1 data1;
    private T2 data2;
    public MyClass()
    {
        data1 = default(T1);
        data2 = default(T2);
    }
}

约束和动态类型dynamic

class MyClass<T1, T2, T3>
    where T1 : struct //值类型
    where T2 : class  //引用类型
    where T3 : new() //表示T3类中必须有一个无参构造方法
{
    public List<T2> CourseList { get; set; }
    public T3 Publisher { get; set; }
    public MyClass()
    {
        this.CourseList = new List<T2>();
        this.Publisher = new T3();//如果没有where T3 : new() 会报错
    }
    public T2 BuyCourse(T1 index)
    {
        dynamic _index = index;
        return this.CourseList[_index];
    }
}


http://www.kler.cn/a/573666.html

相关文章:

  • 二、Redis 安装与基本配置:全平台安装指南 服务器配置详解
  • c++ cin输入流的使用总结
  • (YOLOv11)基于Vue Flask YOLOv11的水稻病害检测系统【含有数据大屏展示】
  • Logstash:数据搬运工的奇幻漂流
  • 苍穹外卖零碎知识点学习记录
  • 深入解析:使用Java爬虫获取淘宝商品详情高级版API接口
  • java常用注解(持续更新)
  • XS9935 ,4通道模拟复合视频解码芯片,双向音频数据同轴共缆传输
  • 二、QT和驱动模块实现智能家居-----4、编译Qt程序并运行
  • conda 更换镜像究极方法
  • Django实现接口token检测的实现方案
  • 计算机网络数据传输探秘:包裹如何在数字世界旅行?
  • 海康摄像头接入流媒体服务器实现https域名代理播放
  • 优选算法的智慧之光:滑动窗口专题(二)
  • 自然语言转SQL之Vanna.ai:AI集成数据库
  • Ansys Zemax | 使用衍射光学器件模拟增强现实 (AR) 系统的出瞳扩展器 (EPE):第 4 部分
  • 报错The default superclass, “jakarta.servlet.http.HttpServlet“(已经配置好tomcat)
  • 理解 React Portal:让你的组件跳出层级限制
  • JSONP解决跨域问题:原理、实现与局限
  • 家政保洁维修行业有没有必要做小程序?