`

C# List<T>用法

阅读更多

C# List<T>用法

    所属命名空间:System.Collections.Generic

    public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

List<T>ArrayList类的泛型等效类,该类使用大小可按需动态增加的数组实现 IList<T> 泛型接口。

 

泛型的好处:它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。

 

性能注意事项:决定使用IList<T> 还是使用ArrayList类(两者具有类似的功能)时,记住IList<T> 类在大多数情况下执行得更好并且是类型安全的。如果对IList<T> 类的类型T使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

 

用微软的话讲:添加到ArrayList中的任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。

 

以下举例用Liststring[] mArray = { "Ha", "Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", "Locu"};

    mList.AddRange(mArray);

 

1List的基础、常用方法:

 

    声明:

    1) List<T> mList = new List<T>(); 

T为列表中元素类型,现在以string类型作为例子

E.g.List<string> mList = new List<string>();

    2) List<T> testList =new List<T> (IEnumerable<T> collection);

    以一个集合作为参数创建List

E.g.List<string> testList = new List<string>(mList);

 

添加元素:

    1) List.Add(T item)

    添加一个元素。

    E.g.mList.Add("John");

2) List.AddRange(IEnumerable<T> collection)

添加一组元素。

E.g.mList.AddRange(temArr);

3) Insert(int index, T item);

index位置添加一个元素。

E.g.mList.Insert(1, "Hei");

 

遍历List中元素:

foreach (T element in mList) 

{

    Console.WriteLine(element);

}

T的类型与mList声明时一样。

E.g.

foreach (string s in mList)

{

    Console.WriteLine(s);

}

 

    删除元素:

    1) List.Remove(T item)

    删除一个值。

    E.g.mList.Remove("Hunter");

2) List.RemoveAt(int index)

删除下标为index的元素。

    E.g.mList.RemoveAt(0);

3) List.RemoveRange(int index, int count)

从下标index开始,删除count个元素。

E.g.mList.RemoveRange(3,2);

 

判断某个元素是否在该List中:

List.Contains(T item)

返回truefalse,很实用。

    E.g.

    if(mList.Contains("Hunter"))

    {

        Console.WriteLine("There is Hunter in the list");

    }

    else

    {

        mList.Add("Hunter");

        Console.WriteLine("Add Hunter successfully.");

}

 

    List里面元素排序:

List.Sort()

默认是元素第一个字母按升序。

    E.g.mList.Sort();

    List里面元素顺序反转:

List.Reverse()

可以与List.Sort()配合使用,达到想要的效果。

    E.g.mList.Sort();

 

List清空:

List.Clear()

    E.g.mList.Clear();

    

    获得List中元素数目:

List.Count()

返回int值。

    E.g.

    int count = mList.Count();

    Console.WriteLine("The num of elements in the list: " +count);

 

2 List的进阶、强大方法:

 

    List.Find方法:搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List 中的第一个匹配元素。

    public T Find(Predicate<T> match);

    Predicate是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回true。当前List的元素被逐个传递给Predicate委托,并在List中向前移动,从第一个元素开始,到最后一个元素结束。当找到匹配项时处理即停止。

Predicate可以委托给一个函数或者一个拉姆达表达式。

    委托给拉姆达表达式:

    E.g.

    string listFind = mList.Find(name =>  //name是变量,代表的是mList

    {                                            //中元素,自己设定

        if (name.Length > 3)

        {

            return true;

        }

            return false;

    });

        Console.WriteLine(listFind);     //输出是Hunter

委托给一个函数:

E.g.

    string listFind1 = mList.Find(ListFind); //委托给ListFind函数

    Console.WriteLine(listFind);               //输出是Hunter

   

    ListFind函数:

    public bool ListFind(string name)

{

    if (name.Length > 3)

            {

                return true;

            }

            return false;

    }

    这两种方法的结果是一样的。

 

    List.FindLast方法:搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List中的最后一个匹配元素。

    public T FindLast(Predicate<T> match);

用法与List.Find相同。

 

List.TrueForAll方法:确定是否List中的每个元素都与指定的谓词所定义的条件相匹配。

    public bool TrueForAll(Predicate<T> match);

    委托给拉姆达表达式:

E.g.

bool flag = mList.TrueForAll(name =>

{

    if (name.Length > 3)

    {

        return true;

        }

        else

        {

            return false;

        }

     });

    Console.WriteLine("True for all:  "+flag);  //flag值为false

    委托给一个函数,这里用到上面的ListFind函数

    E.g.

    bool flag = mList.TrueForAll(ListFind);  //委托给ListFind函数

    Console.WriteLine("True for all:  "+flag);  //flag值为false

    这两种方法的结果是一样的。

 

    List.FindAll方法:检索与指定谓词所定义的条件相匹配的所有元素。

    public List<T> FindAll(Predicate<T> match);

    E.g.

List<string> subList = mList.FindAll(ListFind);

//委托给ListFind函数

    foreach (string s in subList)

    {

        Console.WriteLine("element in subList: "+s);

    }

    这时subList存储的就是所有长度大于3的元素。

 

    List.Take(n)方法:获得前n行返回值为IEnumetable<T>T的类型与List<T>的类型一样。

    E.g.

    IEnumerable<string> takeList=  mList.Take(5);

    foreach (string s in takeList)

    {

        Console.WriteLine("element in takeList: " + s);    

    }

这时takeList存放的元素就是mList中的前5

 

List.Where方法:检索与指定谓词所定义的条件相匹配的所有元素。跟List.FindAll方法类似。

    E.g.

    IEnumerable<string> whereList = mList.Where(name =>

{

    if (name.Length > 3)

        {

            return true;

        }

        else

        {

            return false;

        }

    });

    foreach (string s in subList)

    {

        Console.WriteLine("element in subList: "+s);

    }

    这时subList存储的就是所有长度大于3的元素

 

    List.RemoveAll方法:移除与指定的谓词所定义的条件相匹配的所有元素。

    public int RemoveAll(Predicate<T> match);

E.g.

mList.RemoveAll(name =>

{

    if (name.Length > 3)

        {

            return true;

        }

        else

        {

            return false;

        }

    });

    foreach (string s in mList)

    {

        Console.WriteLine("element in mList:     " + s);

    }

    这时mList存储的就是移除长度大于3之后的元素。

1
4
分享到:
评论

相关推荐

    list转化成JSON字符串

    可将list&lt;T&gt;转化成JSON字符串 使用方法 例: List&lt;自定义类&gt; l; ListChangeToJson.ListChangeToJson classJson = new ListChangeToJson.ListChangeToJson(); classJson.ArrayToJsonAll(l, "数组名字");

    C# List用法

    NULL 博文链接:https://overloving.iteye.com/blog/1751124

    C# ListT ContainsT()的用法小结

    泛型List&lt;T&gt;中有一个比较列表是否已包含对象的方法Contains&lt;T&gt;(),今天在网上搜了一个用法,记录下来,备查。 要用此方法比较我们的自定义对象,首先要有一个比较器, 要注意的是,这里的比较器是实现...

    C#将DataTable转化为List&lt;T&gt;

    本文给大家讲解的是如何使用C#将DataTable数据源转化为List&lt;T&gt;泛型集合(已知T类型) 的方法和示例,有需要的小伙伴可以参考下

    精华志 C#_List_<T>+Find+Exists+FindAll+Sort用法+范例

    精华志 C#_List_<T>+Find+Exists+FindAll+Sort用法+范例 京华志&精华志出品 分享资源 C# ASP.NET SQL DBA 源码

    C# 中 List.Sort运用(IComparerT)排序用法

    在项目中由于要解析一个箱单号,要求从小到大的顺序。由于循环从数据库取出来取得值不是按照...  使用指定的比较器对整个 List&lt;T&gt; 中的元素进行排序。  命名空间: System.Collections.Generic  程序集: msco

    ORM及代码生成器C#源码(2012最新版Kenly.DBFramework4.6.5.5)

    public static List&lt;T&gt; Inherit&lt;Tbase, T&gt;(IList&lt;Tbase&gt; baseEntities, TransformAction&lt;Tbase, T&gt; method); public static void ShadowCopy(IList targetEntities, IList sourceEntities); public static void ...

    ORM及代码生成器和插件C#源码(DBFrameworkV4.5.3)

    一、使用对象关系映射组件Kenly.DBFramework.dll不用编写任何SQL或者存储过程即可实现下列功能: ... public static List&lt;T&gt; Inherit&lt;T&gt;(IList entities); public static T Inherit&lt;T&gt;(object entity);...

    ORM及代码生成器C#源码(最新版V4.5.8.5、非常适于ASP.NET MVC)

    对象关系映射架构(DBFramework)及代码生成器源码 一、使用对象关系映射组件Kenly.DBFramework.dll不用编写任何SQL或者存储过程即可实现下列... public static List&lt;T&gt; Inherit&lt;T&gt;(IList entities); public static ...

    C# ListT的用法小结

    所属命名空间:System.Collections.Generic public class List&lt;T&gt; : IList&lt;T&gt;, ICollection&lt;T&gt;, IEnumerable&lt;T&gt;, IList, ICollection, IEnumerable List&lt;T&gt;类是 ArrayList 类的泛型等效类。该类使用大小可按需动态...

    C# List&lt;T&gt; Contains&lt;T&gt;()的用法小结

    本篇文章主要是对C#中List&lt;T&gt; Contains&lt;T&gt;()的用法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    DevExpress.XtraGrid.GridControl绑定List笔记

    GridControl绑定IList&lt;T&gt;比较简单,但是在调试主从表效果时,一直没能达到预期效果,子列表的列名一直显示相应类的字段名称。这个问题令人大伤脑筋,调试过程着实花了一番功夫,但是问题的解决方法却让人大跌眼镜。...

    关于C#泛型列表ListT的基本用法总结

    命名空间中的List&lt;T&gt;//using System.Collections; 命名空间中的ArrayList //都实现了列表集合,一个是泛形集合,一个是非泛型的//下面我们将Person对象加到集合中 Person p1 = new Person( “aladdin” , 20 );...

    C# 批量设置WinForm界面上的所有控件不可编辑

    方法中,List&lt;T&gt;参数提供时,代表不修改其可编辑性,保持其状态为原始的可编辑或不可编辑 List&lt;KeyValuePair&lt;Control, Boolean&gt;&gt;参数,布尔值表示是否同时忽略修改其子控件,如放在GroupBox内的按钮 List&lt;Type&gt;...

    C#中将DataTable转化成ListT的方法解析

    通常在DAL层我们都需要把DataTable转换为List&lt;T&gt;让调用者尽可能的好用,尽量的不用关心数据库的字段等,所以我们一般传过去的都是List&lt;T&gt;而不是DataTable。 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大...

    用序列化实现ListT 实例的深复制(推荐)

    如果 List&lt;T&gt; 里的 T 是引用类型(如myClass类),则在 像这种写法: List&lt;myClass&gt; lists1 = new List&lt;myClass&gt;() { new myClass(), new myClass() }; List&lt;myClass&gt; lists2 = new List&lt;myClass&gt;(lists1 ); ...

    关于C#泛型列表List&lt;T&gt;的基本用法总结

    本篇文章主要是对C#中泛型列表List&lt;T&gt;的基本用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    Linq基础学习资料,通俗易懂

    6.3.19 ToList 将集合转换为List&lt;T&gt;集合,浅复本 25 6.3.20 ToDictionary 将集合转换为&lt;K, V&gt;集合,浅复本 25 7 Lambda表达式 25 7.1 例1(比效) 25 7.2 例2(多参) 27 7.3 例3(list.Where) 27 7.4 Lambda表达式...

    winform中的ListBox和ComboBox绑定数据用法实例

    本文实例讲述了winform中的ListBox和ComboBox绑定数据...List&lt;Person&gt; persons=new List&lt;Person&gt;(); persons.Add(new Person(“WuMiao”,18,175)); persons.Add(new Person(“YeXinYv”,20,170)); persons.Add(new Pe

Global site tag (gtag.js) - Google Analytics