C#开发-集合使用和技巧(五)集合中的转换方法

news2024/12/23 23:06:46

在C#中,Select, ToList, 和 ToArray 都是用于集合转换的方法,它们各自有不同的用途和适用场景。

测试数据

     /// <summary>
     /// 设备类
     /// </summary>
    class Device
   {
       /// <summary>
       /// Id
       /// </summary>
       public int Id { get; set; }

       /// <summary>
       /// 设备类型
       /// </summary>
       public string Type { get; set; }

       /// <summary>
       /// 名称
       /// </summary>
       public string Name { get; set; }

       /// <summary>
       /// 测试结果
       /// </summary>
       public int Result { get; set; }


   }
 
 
 //初始化数据
 List<Device> list = new List<Device>();
 list.Add(new Device() { Id = 101, Name = "1号设备", Type = "生产设备", Result = 99 });
 list.Add(new Device() { Id = 102, Name = "2号设备", Type = "生产设备", Result = 60 });
 list.Add(new Device() { Id = 103, Name = "3号设备", Type = "测试设备", Result = 98 });
 list.Add(new Device() { Id = 104, Name = "4号设备", Type = "测试设备", Result = 70 });
 list.Add(new Device() { Id = 201, Name = "5号生产设备", Type = "生产设备", Result = 100 });
 list.Add(new Device() { Id = 202, Name = "6号测试设备", Type = "测试设备", Result = 89 });
 list.Add(new Device() { Id = 203, Name = "7号测试设备", Type = "测试设备", Result = 98 });
 list.Add(new Device() { Id = 204, Name = "8号测试设备", Type = "测试设备", Result = 95 });

Select

Select 方法用于将集合中的每个元素转换成另一种形式。它接受一个 lambda 表达式,该表达式定义了如何转换每个元素。Select 返回的是一个序列,通常用于项目映射或投影。

使用场景

  • 当你需要对集合中的每个元素应用一个转换,并且不需要立即执行这个转换时(即延迟执行)。
  • 当你希望返回一个集合而不是具体的集合类型(如列表或数组)。

示例

在这个例子中,Selectdevices 列表中的每个 Device 对象转换为其 Name 属性,返回一个只包含名字的序列。


  // 使用 Select 映射 Devices 中的每个 Device 对象到其 Name 属性
  var deviceNames = list.Select(x => x.Name);
  var deviceIds = list.Select(x => x.Id);
  //转换到一个新的类型
  var dtos = list.Select(x => new DeviceDto { Id = x.Id, Result = x.Result });

x=> x.Name该方法等价于一个带返回值的类型

string GetNane(Device device)
{
      return device.Name;
}

Select 的结果,集合泛型的类型,决定于返回的类型。

如下示例,返回不同类型对应集合类型也随着变化,但是集合的类型都是IEnumerable

  var deviceNames = list.Select(x => x.Name);
  var deviceIds = list.Select(x => x.Id);

  var dtos = list.Select(x => new DeviceDto { Id = x.Id, Result = x.Result });

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ToList

ToList 方法将查询结果转换为 List<T>。它会在内存中立即执行查询,并返回一个列表。

使用场景

  • 当你需要一个具体类型的集合(如列表),并且希望立即执行查询时。如上所示,当我们使用Select或者其他方法,如Where等集合操作时,返回类型如果是集合类型,都会返回IEnumerable,他只提供了集合的基本操作,和相关的查询扩展方法,需要其他操作,如增加,删除, 就需要转换到List类型

示例

using System;
using System.Collections.Generic;
using System.Linq;

public class Device
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Program
{
    public static void Main()
    {
        List<Device> devices = new List<Device>
        {
            new Device { Id = 1, Name = "设备 1" },
            new Device { Id = 2, Name = "设备 2" }
        };

        // 使用 ToList 将 Devices 转换为 List<string>
        var namesList = devices.Select(device => device.Name).ToList();

        // 输出每个设备的名字
        foreach (var name in namesList)
        {
            Console.WriteLine(name);
        }
    }
}

在这里插入图片描述

在这个例子中,ToListSelect 的结果转换为一个列表,这意味着查询会被立即执行,并且你可以对列表进行修改。

使用场景2

foreach循环复制副本

在使用foreach时,我们无法对集合进行添加删除操作,如下所示,这样就会报错
在这里插入图片描述

此时,使用ToList()就可以创建一个集合的副本,再对原集合进行操作,就能正常操作了。同理**ToArray**也可以使用

 foreach (var item in list.ToList())
 {
     list.Remove(item);
     Console.WriteLine("已删除:" + item.Name);
 }

在这里插入图片描述

ToArray

ToArray 方法将查询结果转换为 T[]。它也会在内存中立即执行查询,并返回一个数组。

ToArray用法跟ToList基本相同,只不过返回的是一个数组,这个就看具体的使用需求了,如果对应参数需要是数组就使用这个。

使用场景

  • 当你需要一个数组时,数组在大小上是不可变的,适合于固定大小的集合。
  • 当你需要将结果传递给接受数组的方法时。

示例

using System;
using System.Collections.Generic;
using System.Linq;

public class Device
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Program
{
    public static void Main()
    {
        List<Device> devices = new List<Device>
        {
            new Device { Id = 1, Name = "设备 1" },
            new Device { Id = 2, Name = "设备 2" }
        };

        // 使用 ToArray 将 Devices 转换为 string[]
        var namesArray = devices.Select(device => device.Name).ToArray();

        // 输出每个设备的名字
        foreach (var name in namesArray)
        {
            Console.WriteLine(name);
        }
    }
}

在这个例子中,ToArraySelect 的结果转换为一个数组,这意味着查询会被立即执行。

总结

总结来说,Select 用于转换集合里面对象的类型,从一个类型转变到另一个类型

ToListToArray 主要用于集合类型转换,一般查询方法返回IEnumerable类型,需要这两个方法转换到对应可操作的集合,这两个方法一般是配合其他方法使用,当然也可以用于List与数组互相转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1831761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scala入门【安装与使用、变量与数据类型、运算符、函数、条件判断、循环、字符串、面向对象、数组】

视频地址:Scala大专/本科专用课程_哔哩哔哩_bilibili 目录 P01【01Scala安装与使用】16:15 P02【02变量与数据类型】17:14 P03【03运算符】12:41 P04【04函数】16:40 P05【05条件判断】10:56 P06【06循环】13:33 P07【07字符串】19:09 P08【08面向对象】17:27 P09【0…

C语言王国——数组的旋转(轮转数组)三种解法

目录 一、题目 二、分析 2.1 暴力求解法 2.2 找规律 2.3 追求时间效率&#xff0c;以空间换时间 三、结论 一、题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出…

北京职场社交app开发,“职”在必行

工作一直是人们日常生活中占比较大的一部分&#xff0c;在做好本职工作的同时&#xff0c;职场社交也同样重要。目前&#xff0c;北京职场社交app不仅帮助求职者寻求工作&#xff0c;而且为工作者提供了获取信息与机遇的平台。 一&#xff0e; 北京职场社交app面向的用户群体 …

win10 修改远程桌面端口,win10 修改远程桌面端口详细步骤

在Windows 10中修改远程桌面端口是一个涉及系统配置和网络安全的任务&#xff0c;需要谨慎操作以确保系统的稳定性和安全性。 以下是详细的步骤内容&#xff0c;供您参考&#xff1a; 一、通过注册表编辑器修改远程桌面端口 1. 打开注册表编辑器&#xff1a; - 首先&#…

超能升级!UOS AI 打通全局智能搜索,将 deepin 智能化推向新高度

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 目前 AI 技术迅猛发展&#xff0c;已成为全球技术研究的焦点&#xff0c;咱们 deepin 的 AI 团队带着全新升级的 “全局智能搜索” 和 “UOS AI” 两大 AI 产品和大家见面了。我们采用 “AI 端侧模型” 搭载 “本地…

3D元宇宙虚拟主播引领文旅产业迈向更加美好的未来!

随着文旅产业的蓬勃发展&#xff0c;3D数字代言人的应用正逐渐改变着传统的文旅传播方式。文旅3D数字代言人搭建编辑器的出现&#xff0c;正是满足大部分文旅产业借助数字人浪潮&#xff0c;将传统文化与现代科技完美融合的创新之举。 文旅3D数字代言人搭建编辑器不仅满足了Z世…

游戏找不到steam_api64.dll无法继续执行代码的解决方法

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“steam_api64.dll丢失”。那么&#xff0c;steam_api64.dll到底是干嘛的&#xff1f;为什么会丢失&#xff1f;对电脑有什么具体影响&#xff1f;如何解决这个问题&#xff1f;本文将为您详细…

【IEEE出版丨EI检索】2024新型电力系统与电力电子国际会议(NPSPE 2024)

2024新型电力系统与电力电子国际会议&#xff08;NPSPE 2024&#xff09;将于8月16日至18日在中国大连举行&#xff0c;本届大会致力于为相关领域的专家和学者提供一个探讨行业热点问题&#xff0c;促进科技进步&#xff0c;增加科研合作的平台。本届大会涵盖新型电力系统和电力…

SuperMap GIS基础产品FAQ集锦(20240617)

一、SuperMap iDesktopX 问题1&#xff1a;请问udbx数据源的数据集最多支持多少个属性字段&#xff1f; 现在客户合并数据集后属性字段有1119个&#xff0c;导致无法复制数据集 11.1.1 【问题原因】理论上是没有上限&#xff0c;我们底层没有针对这点进行限制&#xff0c;通常…

一个开源的快速准确地将 PDF 转换为 markdown工具

大家好&#xff0c;今天给大家分享的是一个开源的快速准确地将 PDF 转换为 markdown工具。 Marker是一款功能强大的PDF转换工具&#xff0c;它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文&#xff0c;支持所有语言的转换&#xff0c;并…

Android系统上Bootchart的使用

Android系统的启动细节分析&#xff0c;可以用工具bootchart来进行 一、Bootchart简介 官网地址&#xff1a;https://www.bootchart.org/ Google推荐bootchart作为开机优化的首选工具&#xff1a;https://source.android.com/devices/tech/perf/boot-times#bootchart bootc…

Vulhub——Log4j、solr

文章目录 一、Log4j1.1 Apache Log4j2 lookup JNDI 注入漏洞&#xff08;CVE-2021-44228&#xff09;1.2 Apache Log4j Server 反序列化命令执行漏洞&#xff08;CVE-2017-5645&#xff09; 二、Solr2.1 Apache Solr 远程命令执行漏洞&#xff08;CVE-2017-12629&#xff09;2.…

ORA-25153 错误处理

一、问题描述 执行update语句时&#xff0c;出现如下错误&#xff1a; 二、原因分析 如果临时表空间不存在或者已经为空&#xff0c;就会抛出这个错误。 三、解决方法 1.确认临时表空间是否存在&#xff1a;检查数据库中是否存在你尝试指定的临时表空间。 SELECT TABLES…

MathType软件安装包下载+详细安装教程

数学公式编辑器(MathType)是一款专业的数学公式编辑工具&#xff0c;理科生专用的工具。Mathtype公式编辑器能够帮助用户在各种文档中插入复杂的数学公式和符号。可以轻松输入各种复杂的公式和符号&#xff0c;与Office文档完美结合&#xff0c;显示效果超好&#xff0c;比Offi…

储能电站监控运维管理系统的全面指南

近年来&#xff0c;储能电站在能源行业中扮演着越来越重要的角色。随着可再生能源的快速发展&#xff0c;储能电站监控运维管理系统的有效运用变得至关重要。本文将深入探讨储能电站监控运维管理系统&#xff0c;在这个日益重要的领域中给出一些宝贵建议和见解。 引言 随着全…

使用volta管理前端开发环境

背景&#xff1a;公司有新老不同的产品&#xff0c;使用的node版本不一样&#xff0c;每次都要手动切换node版本&#xff0c;对应的项目才能运行。这样很麻烦&#xff0c;有没有好的解决方法&#xff0c;就找到了volta。 1.为什么是volta&#xff1f; 管网介绍&#xff1a;使用…

基于 VITA57.1 标准的 2 收 2 发射频子卡(国产 ADRV9009子卡)

FMC159 是一款基于 VITA57.1 标准规范&#xff0c;实现 2 收 2 发的射频子模块&#xff0c;该板卡基于国产化 ADRV9009 射频收发器&#xff0c;涵盖了50MHz~6GHz 频段&#xff0c;并集成了双通道收发链路&#xff0c;发送最大实时带宽可到 450MHz&#xff0c;接收最大带宽可以到…

网络层只懂路由?这9个知识点被严重低估了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 网络层想必你已经耳熟能详&#xff0c;它的作用自然是不容小觑。 它负责将数据从源头准确地投递到目的地&am…

SaaS案例分享:成功构建销售渠道的实战经验

面对SaaS产品推广的难题&#xff0c;你是否曾感到迷茫&#xff0c;不知如何选择有效的销售渠道&#xff1f;Shopify独立站联盟营销或许能为你提供新的思路。Shopify作为领先的电商解决方案提供商&#xff0c;其独立站功能为众多商家提供了强大的在线销售平台。而联盟营销&#…

洗地机怎么选?洗地机哪个品牌比较好?四款实力超牛的单品推荐

随着生活节奏的加快&#xff0c;家庭清洁已经成为许多人面临的一大挑战。传统的扫地和拖地方式不仅耗时耗力&#xff0c;还难以彻底清洁每一个角落。家用洗地机的出现&#xff0c;为人们的家庭提供了一个全新的清洁解决方案。然而&#xff0c;在选择合适的洗地机时&#xff0c;…