【问题标题】:How do I use LINQ to Enumerate Dictionaries如何使用 LINQ 枚举字典
【发布时间】:2013-03-25 00:20:56
【问题描述】:

我有以下

private enum Properties
{ one, two, three }

private Dictionary <Properties, String> PropertyToString;
private Dictionary <String, Properies> StringToProperty;

如何使用 LINQ 填充每个字典,以便可以使用以下内容?是否有一行 LINQ 语句可以填充每个语句?

Properties MyResult = StringToProperty["One"];
String MySResult = PropertyToString[Properties.One];

我特别想在第二种情况下使用actaull 属性来索引。

【问题讨论】:

标签: c# .net linq


【解决方案1】:

你可以这样做:

private Dictionary<Properties,String> PropertyToString = Enum
    .GetValues(typeof(Properties))
    .Cast<Properties>().
    .ToDictionary(v => v, v => Enum.GetName(typeof(Properties), v));

private Dictionary<String,Properties> StringToProperty = Enum
    .GetValues(typeof(Properties))
    .Cast<Properties>().
    .ToDictionary(v => Enum.GetName(typeof(Properties), v), v => v);

请注意,PropertyToString 字典是不必要的,因为您可以这样做:

String MySResult = Enum.GetName(typeof(Proeprties), Properties.One);

【讨论】:

  • Enum.GetValues 之后不需要.Cast&lt;Properties&gt;.OfType&lt;Properties&gt; 才能使用LINQ?
  • @AndrewWhitaker 你说得对,我忘了它返回Array。谢谢!
  • @JerKimball 当然,它就是这样做的。另一方面,这正是 OP 想要的,所以它应该可以工作。
  • 例如,PropertyToString 进程可以进一步缩减为 String MySResult = Properties.One.ToString()
  • @LukeH 有人可能会说解析可能比字典查找慢一点,但总的来说你是对的。
猜你喜欢
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 2018-02-16
  • 2019-06-29
相关资源
最近更新 更多