使用lambda转换Dictionary的值

本文关键字:的值 Dictionary 转换 lambda 使用 | 更新日期: 2023-09-27 18:22:31

我在这里有两个集合:

  • 充当缓存的Dictionary<int, Privilege>
  • CCD_ 2,表示给定用户对每个现有工作流的权限

这里的问题是缓存具有完整版本的特权(以及id、友好描述、文本解释等),我需要将Dictionary<Workflow, List<enumPrivilege>>转换为Dictionary<Workflow, List<Privilege>>。。。

我能用一个lambda吗?

使用lambda转换Dictionary的值

取决于是否有将单个枚举值转换为相应对象的逻辑,例如工厂。

为了转换一个Dictionary<K, List<V>>,您可以使用ToDictionary()方法,该方法接受KeyValuePair两次,因此您可以第一次将其用于密钥,第二次将其用作值

假设我们有

 Dictionary<string, List<string>> a = new Dictionary<string, List<string>>();

并希望将其转换为字典b,即string, List<int>

Dictionary<string, List<int>> b 
    = a.ToDictionary(
        kvp => kvp.Key, 
        kvp => kvp.Value.Select(int.Parse).ToList()
    );

同样,您应该能够将枚举转换为对象,通过映射(Select)每个枚举值并在其上执行工厂

Dictionary<Workflow, List<Privilege>> b 
    = a.ToDictionary(
        kvp => kvp.Key, 
        kvp => kvp.Value.Select(PrivilegeFactory.Create).ToList()
    );

或者,如果字典的关键字intenumPrivile值,则可以进行

Dictionary<Workflow, List<Privilege>> b 
    = a.ToDictionary(
        kvp => kvp.Key, 
        kvp => kvp.Value.Select(t => cacheDictionary[(int)t])
    );