使用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吗?
取决于是否有将单个枚举值转换为相应对象的逻辑,例如工厂。
为了转换一个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()
);
或者,如果字典的关键字int
是enumPrivile
值,则可以进行
Dictionary<Workflow, List<Privilege>> b
= a.ToDictionary(
kvp => kvp.Key,
kvp => kvp.Value.Select(t => cacheDictionary[(int)t])
);