c# List.ForEach詳解

一、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-tw/n/149494.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DKPY的頭像DKPY
上一篇 2024-11-05 16:52
下一篇 2024-11-05 16:52

相關推薦

  • Tensor to List的使用

    Tensor to List是TensorFlow框架提供的一個非常有用的函數,在很多的深度學習模型中都會用到。它的主要功能是將TensorFlow中的張量(Tensor)轉換為P…

    編程 2025-04-29
  • 如何使用Python將輸出值賦值給List

    對標題進行精確、簡明的解答:本文將從多個方面詳細介紹Python如何將輸出的值賦值給List。我們將分步驟進行探討,以便讀者更好地理解。 一、變數類型 在介紹如何將輸出的值賦值給L…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Python List查找用法介紹

    在Python中,list是最常用的數據結構之一。在很多場景中,我們需要對list進行查找、篩選等操作。本文將從多個方面對Python List的查找方法進行詳細的闡述,包括基本查…

    編程 2025-04-28
  • Python DataFrame轉List用法介紹

    Python中常用的數據結構之一為DataFrame,但有時需要針對特定需求將DataFrame轉為List。本文從多個方面針對Python DataFrame轉List詳細介紹。…

    編程 2025-04-27
  • Python中list和tuple的用法及區別

    Python中list和tuple都是常用的數據結構,在開發中用途廣泛。本文將從使用方法、特點、存儲方式、可變性以及適用場景等多個方面對這兩種數據結構做詳細的闡述。 一、list和…

    編程 2025-04-27
  • 使用Flutter開發ToDo List App

    本文將會介紹如何使用Flutter開發一個實用的ToDo List App。ToDo List,即待辦事項清單,是一種記錄人們未處理工作和待辦事項的方式。隨著日常生活的快節奏,如此…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論