C# Dictionary 转换成 List

在 C# 中,将Dictionary<TKey, TValue>转换为List的方式取决于你需要List中存储的内容(键、值、键值对,或自定义类型)。以下是常见的转换方式:

1. 转换为包含键值对的List<KeyValuePair<TKey, TValue>>

Dictionary<TKey, TValue>本身实现了IEnumerable<KeyValuePair<TKey, TValue>>接口,可直接通过 LINQ 的ToList()方法转换为包含所有键值对的List。

示例代码:

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq; // 需引用此命名空间以使用ToList()

class Program
{
    static void Main()
    {
        // 定义一个Dictionary
        Dictionary<string, int> dict = new Dictionary<string, int>
        {
            {"苹果", 5},
            {"香蕉", 3},
            {"橙子", 7}
        };

        // 转换为包含键值对的List
        List<KeyValuePair<string, int>> kvpList = dict.ToList();

        // 遍历结果
        foreach (var item in kvpList)
        {
            Console.WriteLine($"键:{item.Key},值:{item.Value}");
        }
    }
}

2. 转换为仅包含键的List

通过Dictionary的Keys属性(返回所有键的集合),再调用ToList()转换为键的List。

示例代码:

csharp 复制代码
// 转换为仅包含键的List
List<string> keysList = dict.Keys.ToList();

// 遍历键
foreach (var key in keysList)
{
    Console.WriteLine("键:" + key); // 输出:苹果、香蕉、橙子
}

3. 转换为仅包含值的List

通过Dictionary的Values属性(返回所有值的集合),再调用ToList()转换为值的List。

示例代码:

csharp 复制代码
// 转换为仅包含值的List
List<int> valuesList = dict.Values.ToList();

// 遍历值
foreach (var value in valuesList)
{
    Console.WriteLine("值:" + value); // 输出:5、3、7
}

4. 转换为自定义类型的List

如果需要将键和值封装到自定义类中,可通过Select投影后再转换为List。

示例代码:

csharp 复制代码
// 定义自定义类
public class Fruit
{
    public string Name { get; set; } // 对应Dictionary的键
    public int Count { get; set; }  // 对应Dictionary的值
}

// 转换为自定义类型的List
List<Fruit> fruitList = dict.Select(kv => new Fruit
{
    Name = kv.Key,
    Count = kv.Value
}).ToList();

// 遍历自定义类型列表
foreach (var fruit in fruitList)
{
    Console.WriteLine($"水果:{fruit.Name},数量:{fruit.Count}");
}

注意事项

需引用System.Linq命名空间(using System.Linq;),否则ToList()方法无法使用。

转换后的List是原Dictionary中元素的副本(浅拷贝),修改List中的元素不会影响原Dictionary(但如果是引用类型,修改内部属性会同步)。

相关推荐
天天进步201517 小时前
UI-TARS 源码解析 #22:二次开发实战:用 UI-TARS 做一个简单的 Windows 自动操作 Agent
windows·ui
北域码匠17 小时前
PID 控制算法完整详解(C# 原生实现,无第三方库)
c#·pid控制·工控开发·闭环控制·自动控制算法·数字pid·增量式pid
啊哈一半醒17 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
离陌在学C#17 小时前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#
new_zhou17 小时前
C++ 项目 AI 协作指南(Windows / MSVC 环境)
c++·人工智能·windows
蔬菜_18 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
asdzx6720 小时前
Java 实战:基于 Spire.Doc 高效提取 Word 文档文本与图片
java·c#·word
爬楼的猪20 小时前
跟着AI Agent学powershell
windows·ai编程
笨鸟先飞,勤能补拙20 小时前
网络安全等级保护 2.0:从定级备案、建设整改到持续合规的系统指南
网络·人工智能·windows·安全·web安全·网络安全·github
小金子会发光21 小时前
C# WinForms 基于 Socket 手搓 Modbus TCP 调试助手(支持 01/02/03/04/05/06/0F/10)
c#·socket·plc·modbus tcp·工业通信