我在这里有两个收藏品:
Dictionary<int, Privilege>
Dictionary<Workflow, List<enumPrivilege>>
,表示给定用户对每个外部工作流程的权限。这里的事情是缓存具有完整版本的权限(以及id,友好描述,文本说明等等),我需要将Dictionary<Workflow, List<enumPrivilege>>
转换为{{ 1}} ...
我可以使用一个lambda吗?
答案 0 :(得分:2)
取决于您是否具有将单个枚举值转换为相应对象的逻辑,例如一家工厂。
为了转换一个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])
);