LINQ查询集合与线程间的操作
List<Person> personList01 = new List<Person>() { new Person(){Name = "1",CompanyID = 1}, new Person(){Name = "2",CompanyID = 1 }, new Person(){Name = "3",CompanyID = 2 }, new Person(){Name = "4",CompanyID = 2 }, new Person(){Name = "5",CompanyID = 1 }, new Person(){Name = "6",CompanyID = 2 }, new Person(){Name = "7",CompanyID = 2 }, new Person(){Name = "8",CompanyID = 1 }, new Person(){Name = "9",CompanyID = 2 }, new Person(){Name = "10",CompanyID = 1 }, new Person(){Name = "11",CompanyID = 2 } }; List<Company> companyList01 = new List<Company>() { new Company(){Name = "Sunwada",Id = 1}, new Company(){Name = "Junykist",Id =2} }; Thread thread01 = new Thread(() => { foreach (var a in personList01.Select(person => new { PersonName = person.Name, PersonCompany = person.CompanyID == 1 ? "Sunwada" : "Junykist" })) { Console.WriteLine(string.Format("{0} ,{1}", a.PersonName, a.PersonCompany)); Thread.Sleep(1000); } }); thread01.Start(); Thread thread02 = new Thread(() => { for (int i = 0; i < 3; i++) { Console.WriteLine("删除的:" + personList01[i].Name); Thread.Sleep(1000); personList01.RemoveAt(1); } }); thread02.Start();
这里,LINQ似乎每次都要查询一边集合中的数据
LINQ中的元素与之前的元素相比:是深拷贝
var list = personList01.Select(person => new { PersonName = person.Name, PersonCompany = person.CompanyID == 1 ? "Sunwada" : "Junykist" }); Console.WriteLine("personList01 LINQ后的list: "); foreach (var a in list) { Console.WriteLine(a.PersonName + ".clone"); } Console.WriteLine("原personList01: "); foreach (var a in personList01) { Console.WriteLine(a.Name); }
Console.WriteLine(); Console.WriteLine("LINQ查询与集合线程间的操作:"); List<Person> personList01 = new List<Person>() { new Person(){Name = "1",CompanyID = 1}, new Person(){Name = "2",CompanyID = 1 }, new Person(){Name = "3",CompanyID = 2 }, new Person(){Name = "4",CompanyID = 2 }, new Person(){Name = "5",CompanyID = 1 }, new Person(){Name = "6",CompanyID = 2 }, new Person(){Name = "7",CompanyID = 2 }, new Person(){Name = "8",CompanyID = 1 }, new Person(){Name = "9",CompanyID = 2 }, new Person(){Name = "10",CompanyID = 1 }, new Person(){Name = "11",CompanyID = 2 } }; List<Company> companyList01 = new List<Company>() { new Company(){Name = "Sunwada",Id = 1}, new Company(){Name = "Junykist",Id =2} }; var list = personList01.Select(person => new { PersonName = person.Name, PersonCompany = person.CompanyID == 1 ? "Sunwada" : "Junykist" }).ToList(); #region Console.WriteLine("personList01 LINQ后的list: "); for (int i = 0; i < list.Count(); i++) { Console.Write(list[i].GetHashCode() + " "); //Console.WriteLine(a.PersonName); Console.Write(list[i].GetHashCode() + " "); } Console.WriteLine("原personList01: "); for (int i = 0; i < personList01.Count(); i++) { Console.Write(personList01[i].GetHashCode() + " "); //Console.WriteLine(a.Name); Console.Write(personList01[i].GetHashCode() + " "); } #endregion //Thread thread01 = new Thread(() => //{ // foreach (var a in list) // { // Console.WriteLine(string.Format("{0} ,{1}", a.PersonName, a.PersonCompany)); // Thread.Sleep(1000); // } //}); //thread01.Start(); //Thread thread02 = new Thread(() => //{ // for (int i = 0; i < 3; i++) // { // Console.WriteLine("删除的:" + personList01[i].Name); // Thread.Sleep(1000); // personList01.RemoveAt(1); // } //}); //thread02.Start();
**:LINQ与foreach。foreach里面有语法糖,封装了LINQ的语句并且拿到了执行结果的集合。所以foreach在每次遍历的时候不需要执行LINQ语句,只需遍历LINQ的执行结果集合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】