首页 > 其他分享 >WPF 集合操作进阶:提取特定字段、转换 ObservableCollection 和过滤数据

WPF 集合操作进阶:提取特定字段、转换 ObservableCollection 和过滤数据

时间:2024-11-09 16:43:48浏览次数:6  
标签:ObservableCollection 进阶 ProductLineNo List N001 Device new WPF Name

文章目录


1. 引言

在 C# 开发中,集合操作是非常常见的任务,特别是在数据处理和用户界面设计中。本文将介绍如何从 List< T > 中提取特定字段、将 List< T > 转换为observableCollection< T > 以及如何过滤 List< T > 集合。这些技巧对于提高开发效率和代码可读性非常有帮助。

2. 从 List< T > 提取特定字段

定义 Device 类

首先,定义一个 Device 类,包含设备的相关信息,如设备代码 (ProductLineNo ) 和设备名称 (Name):

public class Device
{
    public string ProductLineNo  { get; set; }
    public string Name { get; set; }
    // 其他属性...
}

创建 List< Device > 并填充数据
接下来,创建一个 List< Device > 并填充一些数据:

List<Device> devices = new List<Device>
{
    new Device { ProductLineNo  = "N001", Name = "Device A" },
    new Device { ProductLineNo  = "N002", Name = "Device B" },
    new Device { ProductLineNo  = "N001", Name = "Device C" },
    new Device { ProductLineNo  = "N003", Name = "Device D" }
};

使用 LINQ 提取特定字段
现在,我们可以使用 LINQ 来提取所有的 ProductLineNo 字段值:

using System.Linq;

List<string> ProductLineNos = devices.Select(d => d.ProductLineNo ).ToList();

上述代码中,Select 方法用于从每个 Device 对象中选择 ProductLineNo 属性,ToList 方法则将结果转换为 List< string >。

3. 将 List< T > 转换为observableCollection< T >

定义observableCollection< T >
observableCollection 是一个特殊的集合类型,它支持集合更改的通知机制,这使得它非常适合与数据绑定技术一起使用,特别是在 WPF 和 Xamarin 应用程序中。
将 List< Device > 转换为observableCollection< Device >
假设我们已经有了一个 List< T >,并且希望将其转换为observableCollection< T >:

using System.Collections.objectModel;

// 已有的 List<Device>
List<Device> devices = new List<Device>
{
    new Device { ProductLineNo  = "N001", Name = "Device A" },
    new Device { ProductLineNo  = "N002", Name = "Device B" },
    new Device { ProductLineNo  = "N001", Name = "Device C" },
    new Device { ProductLineNo  = "N003", Name = "Device D" }
};

// 转换为 bservableCollection<Device>
bservableCollection<Device> - bservableDevices = new bservableCollection<Device>(devices);

将 List< string > 转换为observableCollection< string >
同样的,如果你需要将 List< string > 转换为observableCollection< string >,可以按照相同的方法进行:

List<string> ProductLineNos = new List<string> { "N001", "N002", "N001", "N003" };
bservableCollection<string> observableProductLineNos = new bservableCollection<string>(ProductLineNos);

4. 过滤 List< T > 集合

在某些情况下,我们需要从集合中过滤出满足特定条件的对象。例如,我们可能只想保留 ProductLineNo 为 “N001” 的设备。使用 LINQ 可以非常方便地实现这一点。继续使用前面定义的 List< Device > 集合:

// 过滤 ProductLineNo  为 "N001" 的设备
List<Device> filteredDevices = devices.Where(d => d.ProductLineNo  == "N001").ToList();

上述代码中,Where 方法用于过滤集合中的元素,d => d.ProductLineNo == “N001” 是一个 lambda 表达式,表示只选择 ProductLineNo 为 “N001” 的元素。ToList 方法将过滤后的结果转换为一个新的 List< Device >。

5. 总结

本文介绍了如何在 C# 中从 List< T > 中提取特定字段、将 List< T > 转换为 observableCollection< T > 以及如何过滤 List< T > 集合。这些操作使用 LINQ 可以非常简洁高效地完成。通过这些技巧,你可以更灵活地管理和操作集合数据,提高代码的可读性和维护性。

6. 完整示例代码

以下是本文中所有操作的完整示例代码:

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

public class Device
{
    public string ProductLineNo  { get; set; }
    public string Name { get; set; }
    // 其他属性...
}

class Program
{
    static void Main()
    {
        List<Device> devices = new List<Device>
        {
            new Device { ProductLineNo  = "N001", Name = "Device A" },
            new Device { ProductLineNo  = "N002", Name = "Device B" },
            new Device { ProductLineNo  = "N001", Name = "Device C" },
            new Device { ProductLineNo  = "N003", Name = "Device D" }
        };

        // 提取所有 ProductLineNo  字段值
        List<string> ProductLineNos = devices.Select(d => d.ProductLineNo ).ToList();

        // 转换为 bservableCollection<Device>
        bservableCollection<Device> observableDevices = new bservableCollection<Device>(devices);

        // 转换为 bservableCollection<string>
        List<string> ProductLineNosList = new List<string> { "N001", "N002", "N001", "N003" };
        bservableCollection<string> observableProductLineNos = new bservableCollection<string>(ProductLineNosList);

        // 过滤 ProductLineNo  为 "N001" 的设备
        List<Device> filteredDevices = devices.Where(d => d.ProductLineNo  == "N001").ToList();

        // 输出过滤结果
        f- reach (var device in filteredDevices)
        {
            Console.WriteLine($"ProductLineNo : {device.ProductLineNo }, Name: {device.Name}");
        }
    }
}

希望这篇文章对你有所帮助!如果你有任何问题或建议,请随时留言交流。

标签:ObservableCollection,进阶,ProductLineNo,List,N001,Device,new,WPF,Name
From: https://blog.csdn.net/qq_21419015/article/details/143615918

相关文章

  • 【黑马python:函数进阶】81-84
    目录一、函数的多个返回值二、函数的多种传参方式1.函数参数种类1.1位置参数与关键字参数1.2缺省参数1.3不定长参数三、函数作为参数传递四、匿名函数一、函数的多个返回值如果一个函数要有多个返回值,该如何书写代码?按照返回值的顺序,写对应顺序的多个变量接......
  • 【模块一】kubernetes容器编排进阶实战之containerd安装及nerdctl客户端⼯具
    安装containerdapt/yum安装#验证仓库版本[root@k8s-node3~]#apt-cachemadisoncontainerdcontainerd|1.7.12-0ubuntu2~22.04.1|https://mirrors.aliyun.com/ubuntujammy-updates/mainamd64Packagescontainerd|1.6.12-0ubuntu1~22.04.3|https://mirrors.aliyu......
  • 鸿蒙开发进阶(HarmonyOS )账号密码自动填充
     鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)密码保......
  • 鸿蒙开发进阶(HarmonyOS)录像实现方案(ArkTS)
     鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)当前示......
  • 鸿蒙开发进阶(OpenHarmony)DAC模拟信号
    鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)功能简介......
  • 鸿蒙开发进阶(HarmonyOS)原生能力设备唯一ID实践
      鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)场景......
  • 向量数据库 PieCloudVector 进阶系列丨打造以 LLM 为基础的聊天机器人
    本系列前两篇文章深入探讨了PieCloudVector在图片和音频数据上的应用之后,本文将聚焦于文本数据,探索PieCloudVector对于文本数据的向量化处理、存储以及检索,并最终结合LLM打造聊天机器人的全流程。在自然语言处理任务中涉及到大量对文本数据的处理、分析和理解,而向量数据库......
  • WPF+MVVM案例实战与特效(二十六)- 3D粒子方块波浪墙效果实现
    文章目录1、案例效果2、案例实现1、文件创建2.功能代码实现3、粒子功能应用1、前端布局与样式2、代码解释2、后端功能代码1、案例效果2、案例实现1、文件创建打开Wpf_Examples项目、Models文件夹下创建3D粒子模型类ParticleCubeWaveMode......
  • WPF MVVM入门系列教程(四、数据绑定演示)
    在前面的文章中,介绍了数据绑定功能及使用方法。本文会使用一些数据绑定的实例来进行演示。演示过程中,涉及了数据模板功能,如果对数据模板功能还不熟悉,可以参考下面的链接:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/data/data-templating-overview?view=netframeworkd......
  • 【C++进阶】智能指针的使用及原理(1)
    1.智能指针的使用场景分析下面程序中我们可以看到,new了以后,我们也delete了,但是因为抛异常导,后面的delete没有得到执行,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出,但是因为new本身也可能抛异常,连续的两个new和下面的Divide都可能会抛异......