C#

Posted 帝君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#相关的知识,希望对你有一定的参考价值。

 Ilist / List

 IList:首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。

  它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList<T>可以胜任。

  不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList<T>就爱莫能助了。

1、当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间.

2、IList <>是个接口,定义了一些操作方法这些方法要你自己去实现
List <>是泛型类,它已经实现了IList <>定义的那些方法

IList <Class1> IList11 =new List <Class1>();
List <Class1> List11 =new List <Class1>();

这两行代码,从操作上来看,实际上都是创建了一个List<Class1>对象的实例,也就是说,他们的操作没有区别。

只是用于保存这个操作的返回值变量类型不一样而已。

那么,我们可以这么理解,这两行代码的目的不一样。
List <Class1> List11 =new List <Class1>();
是想创建一个List<Class1>,而且需要使用到List<T>的功能,进行相关操作。

IList <Class1> IList11 =new List <Class1>();
只是想创建一个基于接口IList<Class1>的对象的实例,只是这个接口是由List<T>实现的。所以它只是希望使用到IList<T>接口规定的功能而已

 List基础、常用方法
using System;
using System.Collections.Generic;

namespace ListStudy
{
    /// <summary>
    /// 以下没有接收返回值的方法都是属于 void方法
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            List<string> lists = new List<string>();

            /* 添加元素 */
            //添加一个元素
            lists.Add("first");
            //添加多个元素
            string[] temArr = { "two", "three" };
            lists.AddRange(temArr);
            //在index位置添加一个元素
            lists.Insert(0, "zero");
            //遍历List中元素
            foreach (string item in lists)
            {
                Console.Write(item + "/");
            }
            //结果为:zero/first/two/three/

            /* 删除元素 */
            //删除一个值
            bool remove = lists.Remove("first1");
            //删除下表为index的元素
            lists.RemoveAt(3);    //超出下标会报异常
            //从下标index开始,删除count个元素
            lists.RemoveRange(2, 1);  //超出下标或者个数超出list长度都会报异常

            /* 判断某个元素是否在list中 */
            bool contains = lists.Contains("firsT");//属于精确查找匹配,不是模糊匹配
            Console.WriteLine(contains);

            /* 元素排序 */
            lists.Sort();   //默认是元素第一个字母按升序
            //给List里面元素顺序反转
            lists.Reverse();    //注意这个需要与sort一起使用

            /* list清空 */
            lists.Clear();

            /* list获取元素个数 */
            int count = lists.Count;

            /* list lambda表达式 */
            string[] temArr1 = { "zero", "first", "two", "three" };
            lists.AddRange(temArr1);
            string s = lists.Find(name =>
            {
                if (name.Contains("w"))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }); //返回第一个模糊匹配的元素
            //以下方法都可以使用这种方式
            //List<string> ss = lists.FindAll();
            //List<string> ss = lists.FindLast();   //返回最后一个模糊匹配的元素
            //bool trueForAll = lists.TrueForAll(); //确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。比如是否每个元素的长度都超过了3
            //IEnumerable<string> takeList=  mList.Take(5); //获得前n行 返回值为IEnumetable<T>,T的类型与List<T>的类型一样
            //IEnumerable<string> ss = lists.Where();  //检索与指定谓词所定义的条件相匹配的所有元素。跟List.FindAll方法类似。
            //int num = lists.RemoveAll();  //移除与指定的谓词所定义的条件相匹配的所有元素。并返回移除的数量
            Console.Write($"s:{s}");
        }
    }
}
 数组
using System;

namespace ListStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建数组的几种方法
            //第一种
            string[] myArray = new string[10];

            //第二种
            string[] myArray2 = { "first", "two" };

            //第三种
            string[] myArray3 = new string[3] { "first", "two", "there" };

            //第四种
            string[] myArray4 = new string[] { "first", "two", "there", "four" };

            //数组排序
            Array.Sort(myArray4);
        }
    }
}
 Array类方法
using System;

namespace ListStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] list = { 34, 72, 13, 44, 25, 30, 10 };

            Console.Write("原始数组: ");
            foreach (int i in list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();

            // 逆转数组
            Array.Reverse(list);
            Console.Write("逆转数组: ");
            foreach (int i in list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();

            // 排序数组
            Array.Sort(list);
            Console.Write("排序数组: ");
            foreach (int i in list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();

            int[] list1 = new int[3];
            Array.Copy(list, list1, 3);// 源数组,目标数组, 复制长度
            Console.Write("Copy数组: ");
            foreach (int i in list1)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();

            int[] list2 = new int[3];
            Array.Copy(list, 3, list2, 0, 3);// 源数组,从源数组第几个下标index开始复制,目标数组, 从目标数组的第几个下表index开始放值, 复制长度
            Console.Write("Copy数组: ");
            foreach (int i in list2)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();

            Console.ReadKey();
        }
    }
}
 List 与 数组之间的相互转换
using System.Collections.Generic;

namespace ListStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            //数组转List
            string[] temArr1 = { "zero", "first", "two", "three" };
            List<string> lists = new List<string>(temArr1);

            //List转数组
            List<int> listss = new List<int>() { 1, 2, 3, 4, 5 };
            int[] temArray2 = listss.ToArray();
        }
    }
} 

以上是关于C#的主要内容,如果未能解决你的问题,请参考以下文章

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

是否可以动态编译和执行 C# 代码片段?

C#常用代码片段备忘

优化 C# 代码片段、ObservableCollection 和 AddRange

VS2015使用技巧 打开代码片段C#部分

记录C#常用的代码片段