一、List.ForEach概述
在c#中,List是一個常用的集合類型,提供很多常用的方法,如Add、Remove、Contains等。而List.ForEach方法則是一個更加高效且方便的遍歷List的方法,它可以避免使用for循環、數組下標等不便捷的方式去遍歷List,在Lambda表達式中更加清晰地表達代碼的意圖。List.ForEach的使用方法如下:
List nums = new List { 1, 2, 3 }; nums.ForEach(num => Console.WriteLine(num));
上述代碼將會輸出1、2、3,forEach方法接收一個Action類型的參數,該參數是一個Lambda表達式,可以對list中的每一個元素進行處理。
二、Cba賽程
c# List.ForEach方法可以遍歷任何類型的List,包括複雜的對象列表。一個常見的例子是,我們需要查詢某個賽事的比賽場次時間和地點,並打印出來。假設我們有一個包含賽程信息的Match類,Match類具有屬性Date、Location,Match類的列表可以使用List來表示:
public class Match { public DateTime Date { get; set; } public string Location { get; set; } } List matches = new List { new Match { Date = new DateTime(2022, 01, 01, 12, 0, 0), Location = "張家港市體育館" }, new Match { Date = new DateTime(2022, 01, 03, 10, 0, 0), Location = "前衛體育中心" }, new Match { Date = new DateTime(2022, 01, 05, 14, 0, 0), Location = "沃德體育館" } }; matches.ForEach(match => Console.WriteLine($"時間:{match.Date},地點:{match.Location}"));
輸出的結果為:
時間:2022/1/1 12:00:00,地點:張家港市體育館 時間:2022/1/3 10:00:00,地點:前衛體育中心 時間:2022/1/5 14:00:00,地點:沃德體育館
三、Clash
在複雜的場景下,List.ForEach方法可以幫助我們簡化代碼,比如可以用它來遍歷嵌套的列表。假設我們需要查詢一組玩家的個人信息,每個玩家都有一個Name和一個Score列表,Score列表包含若干個得分項。
public class Player { public string Name { get; set; } public List Scores { get; set; } } List players = new List { new Player { Name = "玩家1", Scores = new List { 98, 80, 88 } }, new Player { Name = "玩家2", Scores = new List { 90, 91, 89 } }, new Player { Name = "玩家3", Scores = new List { 81, 79, 83 } } }; players.ForEach(player => { Console.Write($"玩家:{player.Name},成績:"); player.Scores.ForEach(score => Console.Write($"{score} ")); Console.WriteLine(); });
輸出的結果為:
玩家:玩家1,成績:98 80 88 玩家:玩家2,成績:90 91 89 玩家:玩家3,成績:81 79 83
四、CCTV5節目表
c# List.ForEach方法還可以和LINQ方法一起使用,幫助我們快速查詢和篩選數據。以下示例是一個使用List和LINQ查詢CCTV5節目表的例子,列表每個元素包含一個時間段和一個節目名稱。
List programList = new List { (new DateTime(2022, 1, 1, 8, 00, 0), new DateTime(2022, 1, 1, 10, 0, 0), "體育節目1"), (new DateTime(2022, 1, 1, 10, 00, 0), new DateTime(2022, 1, 1, 12, 0, 0), "NBA直播"), (new DateTime(2022, 1, 2, 10, 00, 0), new DateTime(2022, 1, 2, 12, 0, 0), "NBA直播"), (new DateTime(2022, 1, 2, 12, 30, 0), new DateTime(2022, 1, 2, 14, 0, 0), "體育節目2") }; // 按照時間升序排序,並篩選出2022年1月1日的節目 programList.OrderBy(p => p.Start) .Where(p => p.Start.Year == 2022 && p.Start.Month == 1 && p.Start.Day == 1) .ToList() .ForEach(p => Console.WriteLine($"{p.Start.ToString("HH:mm")} - {p.End.ToString("HH:mm")}:{p.Program}"));
輸出的結果為:
08:00 - 10:00:體育節目1 10:00 - 12:00:NBA直播
五、CBA
c# List.ForEach方法的使用場景非常廣泛,例如批量修改集合中的數據,或者根據集合中的數據更新數據庫等等。這裡我們以更新一個學生姓名的例子來演示。假設我們有一個包含學生信息的Student類,Student類包含屬性Name、Age,我們將創建一個包含10個學生的List,將每個學生的姓名修改為“學生1”、“學生2”、……、“學生10”,使用如下代碼實現:
public class Student { public string Name { get; set; } public int Age { get; set; } } List students = new List(); for (int i = 0; i student.Name = student.Name + "修改後");
最後遍歷輸出所有學生的姓名,可以看到每個學生的姓名都被修改了:
students.ForEach(student => Console.WriteLine(student.Name));
輸出的結果為:
學生1修改後 學生2修改後 學生3修改後 學生4修改後 學生5修改後 學生6修改後 學生7修改後 學生8修改後 學生9修改後 學生10修改後
六、CCTV5在線直播
c# List.ForEach方法的使用需要注意一些細節,例如在Lambda表達式中使用外部變量時,需要特別小心,以免造成錯誤。以下是一個使用List.ForEach方法錯誤的例子:
int[] nums = { 1, 2, 3, 4, 5 }; List strList = new List(); nums.ToList().ForEach(num => strList.Add(num.ToString()));
這段代碼期望將nums數組的所有元素轉為字符串,添加到strList中,但實際上strList沒有發生任何變化。
這是因為,在ForEach中使用Lambda表達式時,我們傳入的是一個委託,而委託調用時每次都會重新創建一個上下文,這意味所有外部變量都是新的。因此,在ForEach循環內部修改閉包變量是無效的,我們需要在Lambda表達式外部聲明一個變量,進行正確的操作。
以下是代碼的正確實現:
int[] nums = { 1, 2, 3, 4, 5 }; List strList = new List(); int index = 0; // 聲明外部變量 nums.ToList().ForEach(num => { strList.Add(num.ToString()); index++; });
這裡使用了一個額外的變量index來記錄操作次數,從而避免了在Lambda表達式中修改閉包變量。
七、C1駕照能開什麼車
總結,c# List.ForEach方法是一個非常方便、高效的遍歷List的方法,在處理List集合時可以大大簡化代碼量,在實際編程中非常實用。
以下是本文中示例代碼的完整代碼:
using System;
using System.Collections.Generic;
using System.Linq;namespace CSharpForEach
{
class Program
{
static void Main(string[] args)
{
// 示例一:遍歷List
List nums = new List { 1, 2, 3 };
nums.ForEach(num => Console.WriteLine(num));// 示例二:遍歷List,輸出賽程信息
List matches = new List
{
new Match { Date = new DateTime(2022, 01, 01, 12, 0, 0), Location = "張家港市體育館" },
new Match { Date = new DateTime(2022, 01, 03, 10, 0, 0), Location = "前衛體育中心" },
new Match { Date = new DateTime(2022, 01, 05, 14, 0, 0), Location = "沃德體育館" }
};matches.ForEach(match => Console.WriteLine($"時間:{match.Date},地點:{match.Location}"));
// 示例三:遍歷嵌套的列表
List players = new List
{
new Player { Name = "玩家1", Scores = new List { 98, 80, 88 } },
new Player { Name = "玩家2", Scores = new List { 90, 91, 89 } },
new Player { Name = "玩家3", Scores = new List { 81, 79, 83 } }
};players.ForEach(player =>
{
Console.Write($"玩家:{player.Name},成績:");
player.Scores.ForEach(score => Console.Write($"{score} "));
Console.WriteLine();
});// 示例四:結合LINQ快速查詢CCTV5節目表
List programList = new List
{
(new DateTime(2022, 1, 1, 8, 00, 0), new DateTime(2022, 1, 1, 10, 0, 0), "體育節目1"),
(new DateTime(2022, 1, 1, 10, 00, 0), new DateTime(2022, 1, 1, 12, 0, 0), "NBA直播"),
(new DateTime(2022, 1, 2, 10, 00, 0), new DateTime(2022, 1, 2, 12, 0, 0), "NBA直播"),
(new DateTime(2022, 1, 2, 12, 30, 0), new DateTime(2022, 1, 2, 14, 0, 0), "體育節目2")
};programList.OrderBy(p => p.Start)
.Where(p => p.Start.Year == 2022 && p.Start.Month == 1 && p.Start.Day == 1)
.ToList()
.ForEach(p => Console.WriteLine($"{p.Start.ToString("HH:mm")} - {p.End.ToString("HH:mm")}:{p.Program}"));// 示例五:批量修改List中的數據
List students = new List();
for (int i = 0; i student.Name = student.Name + "修改後");
students.ForEach(student => Console.WriteLine(student.Name));// 示例
原創文章,作者:DKPY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149494.html