第十五章 c# 泛型 泛型约束 集合 泛型集合 字典

一.泛型

泛型可以提供代码性能 避免了装箱和拆箱 Object类型作为参数时  所欲偶的实参都会进行类型转换

值类型转换成引用类型 这个转换称为装箱

引用类型  转换成值类型 相反的过程称为拆箱

int number = 10;
            // 装箱  
            object obj = number;
            // 拆箱  
            number = (int)obj;

泛型 和 object

调用

     ProgramMothod(1);
            ProgramMothod("2");
            ProgramMothod1(1);
            ProgramMothod1("2");

方法

  public static  void ProgramMothod(Object a) {
            Console.WriteLine(a);
        }
        public static void ProgramMothod1(T a)
        {
            Console.WriteLine(a);
        }

二.泛型约束

泛型约束:泛型中的数据约束可以指定泛型类型的范围

泛型约束总共有五种。
约束     说明
T:结构     类型参数必须是值类型
T:类     类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
T:new()     类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。
T:<基类名>     类型参数必须是指定的基类或派生自指定的基类。
T:<接口名称>     类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。

例子:

  MyClass myClass =new  MyClass();

            int a = 1;
            string b = "123";
            IMyInterface myInterface =null;
            string d = "321";
            MyClassTest1 myClassTest1 = new MyClassTest1();
            myClass.MyClassMothod(a,b,myInterface,d, myClassTest1);

方法

  public class MyClassTest
    { 
    
    
    
    }
    public class MyClassTest1:MyClassTest
    {



    }
    public class MyClass 
        where T : struct 
        where K : class 
        where V : IMyInterface 
        where W : K
        where X : MyClassTest
    {

        public void MyClassMothod(T a, K b, V c, W d, X e) {

            Console.WriteLine(a.GetType().ToString());
            Console.WriteLine(b.GetType().ToString());
            Console.WriteLine(c.GetType().ToString());
            Console.WriteLine(d.GetType().ToString());
            Console.WriteLine(e.GetType().ToString());
        }

三 集合

ArrayList 可变数组

1.ArrayList 大小是按照其中存储的数据来动态扩充与收缩的

2.ArrayList可以很方便地进行数据添加插入删除

3.ArrayList 可以存储任意类型

3.ArrayList  在存储和读取数据是  会进行装箱和拆箱 影响程序性能

//创建对象

 ArrayList arrayList = new ArrayList();

Add末尾添加元素 返回值为添加元素的索引值

元素类型为object  可以提那家任意类型

 int index = arrayList.Add(1);
            int index1 =  arrayList.Add("nihao");

范围添加元素  可以直接添加  继承ICollection的集合的对象

 arrayList.AddRange(intArray);
            Console.WriteLine(index);
            Console.WriteLine(index1);

查询元素

 foreach (var item in arrayList)
            {
                Console.WriteLine(item);
            }
            for (int i = 0; i < arrayList.Count; i++) {
                Console.WriteLine(arrayList[i]);
            }

插入元素

参数1 索引值     参数2  插入的元素

 arrayList.Insert(3, 10000);
            foreach (var item in arrayList) {

                Console.WriteLine("~~~~~"+item);
            }
            arrayList.InsertRange(0, intArray);
            foreach (var item in arrayList)
            {
                Console.WriteLine("!!!!!" + item);
            }

查询数组中是否存在某个元素 存在返回其索引值 反之返回-1

 int indexof = arrayList.IndexOf(10000);
            Console.WriteLine(indexof);

按索引值删除元素

 arrayList.RemoveAt(indexof);
            foreach (var item in arrayList)
            {
                Console.WriteLine("*****"+item);
            }

按元素删除元素  删除匹配第一个元素

 arrayList.Remove(1);
            foreach (var item in arrayList)
            {
                Console.WriteLine("######" + item);
            }

范围删除元素

参数1 删除开始的索引值     参数2  删除的长度

 arrayList.RemoveRange(0, 5);
            foreach (var item in arrayList) {
                Console.WriteLine("^^^^^^"+item);
            } 

清空元素

  arrayList.Clear();

四 List 泛型集合

List 与其他数组的比较

List 与不可变数组(Array类)比较类似  都用于存放类型相同的元素

List  与可变数组(ArrayList)比较类似  元素长度不固定

创建泛型集合对象  存储的元素类型为string

  List list = new List();

添加元素

通过添加相同类型的集合 范围添加元素

 list.Add("123");
            string[] stringArray = new string[2] { "111", "222" };
          //  通过添加相同类型的集合 范围添加元素
            list.AddRange(stringArray);

            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }

其他属性的使用方法和ArerayList一样

五 字典

C#中的Dictionary字典类

1.Dictionary 没有索引值 只有key/Value

2.key/Value 都可以是任何类型

3.Dictionary 是可变长度集合

4.Dictionary  是饭型的集合 定义对象时 要指定 key/Value的类型

5.通过key值查询value 且key值是唯一

创建对象

   Dictionary keyValuePairs = new Dictionary();

添加元素

 keyValuePairs.Add("0", 10);
            keyValuePairs.Add("1", 20);

取值

 Console.WriteLine(keyValuePairs["0"]);

修改值

 keyValuePairs["0"] = 30;

遍历字典 方式1

 foreach (var item in keyValuePairs)
            {
                Console.WriteLine(item);
                
            }

遍历字典 方式2

  foreach (KeyValuePair item in keyValuePairs)
            {
                Console.WriteLine("Key = {0}, Value = {1}", item.Key, item.Value);
            }

遍历字段 方式3

   //keyValuePairs.Keys 字典中的所有key值 组成了一个有序的集合
            foreach (var item in keyValuePairs.Keys)
            {   
                //Key
                Console.WriteLine("~~~~"+item);
                //value
                Console.WriteLine("~~~~~"+keyValuePairs[item]);

            }
            foreach (var item in keyValuePairs.Values)
            {
                Console.WriteLine("!!!!"+item);
            }

通过key删除value元素

  bool isSuccess =   keyValuePairs.Remove("0");
            bool isSuccess1 = keyValuePairs.Remove("3");
            Console.WriteLine(isSuccess);
            Console.WriteLine(isSuccess1);

查询key是否存在字典中  有返回true  反之返回false

  bool isTrue =     keyValuePairs.ContainsKey("0");

清空

 keyValuePairs.Clear();

你可能感兴趣的:(c#,开发语言)