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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
DKPYDKPY
上一篇 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

发表回复

登录后才能评论