一,我们了解下,list的工作原理
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ListDemo { class Program { static void Main(string[] args) { //list:原理也是数组机制,集合的容量 List<int> il = new List<int>(); Console.WriteLine(il.Capacity); // 在初始化是容量默认为0 for (int i = 0; i < 4; i++) { il.Add(i); } Console.WriteLine(il.Capacity); // 当第一次赋值的,容量为4 for (int i = 0; i < 1; i++) { il.Add(i); } Console.WriteLine(il.Capacity); // 当超越4时的,容量为4*2,以后以此类推 //list:原理也是数组机制,当在一开始赋值容量,超过则是根据你赋值的乘以2来增加容量 //这如果在初始化给List确定的容量,而不会出现容量增加,数组赋值到另一个数组的情况,适当list效率 List<int> il2 = new List<int>(3); for (int i = 0; i < 5; i++) { il2.Add(i); } Console.WriteLine(il2.Capacity); // //输出6 il2.Sort(); Console.ReadKey(); } } }
综上总结:
1》List原理也是数组机制
2》List在初始化是容量默认为0,第一次扩容默认增加4,以后均已乘以2增长,在容量增加的同时,将就得数组数据复制到新的数组
3》你也可以在构造给list赋初始值,当在一开始赋值容量,超过则是根据你赋值的乘以2(3*2=6)来增加容量
4》如果在初始化给List确定的容量,而不会出现容量增加,旧数组复制值到另新数组的情况,提高list效率
二,转换代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class ListDemo : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //将当前 List 中的元素转换为另一种类型,并返回包含转换后的元素的列表 List<string> ls = new List<string>() { "1", "2", "3" }; List<int> li = ls.ConvertAll<int>(i => int.Parse(i)); var li2 = ls.Select(i => int.Parse(i)); //list模型转换 Test t = new Test(); t.a = 1; t.b = "45"; List<Test> lt = new List<Test>(); lt.Add(t); lt.Add(t); lt.Add(t); List<Test2> lst = lt.ConvertAll(x => new Test2 { c = x.a.ToString(), d = x.b }); //list模型转数组 var ToSZ = String.Join(",", lt.ConvertAll(u => u.a).ToArray()); //list转object数组 List<Object> m = lt.ConvertAll(s => (object)s); } public class Test { public int a { get; set; } public string b { get; set; } } public class Test2 { public string c { get; set; } public string d { get; set; } } }