【问题标题】:How to convert a IEnumerable to Dictionary如何将 IEnumerable 转换为 Dictionary
【发布时间】:2013-11-04 23:08:32
【问题描述】:

我有这样的字典

Dictionary<MyStructure, MyObject>

MyStructure 表示公共结构 ... MyObject 表示特定的实体...

然后通过事件我将我的字典作为

IEnumerable<MyObject> col = this.GetCollection().Values;

然后,当我管理我的事件时,我使用我的 IEnumerable,但我想将其转换为以前的字典以访问其属性,但我无法做到。我试试这个。

        Dictionary<MyStructure, MyObject> dict =
            args.MyObjectCollection.ToDictionary(x => x.Key, y => y.Value);

我正在使用“使用 System.Linq;”并且 Key 和 Value 无法识别。当我在 x 或 y 之后写点时。助手向我展示了对象 MyObject 的属性。

【问题讨论】:

  • 你不能,你只有值,而不是键。您需要修复您的事件,以便它通过 IDictionary 或 IEnumerable&lt;MyStructure, MyObject&gt; 代替。还要考虑这是否有必要,当您还通过发送方的属性或 GetXxx() 方法公开字典时,就不需要了。事件通常应仅传递仅在引发事件的特定时刻有效且无法通过其他方式合理获取的数据。传递字典是一种代码异味,事件接收器存储过时数据副本的可能性太大。

标签: c# dictionary ienumerable converters


【解决方案1】:

当你使你的 IEnumerable 时,你失去了你的 MyStructure Keys ... 如果您知道一种从 MyObject 实例创建适当结构的方法,那么您可以解决这个问题...

MyObjectCollection.ToDictionary(x=>makeStructFromMyObject(x), x=>x);


//... with...

private MyStruct makeStructFromMyObject(MyObject obj)
{
   //to be implemented by you
}

如果您正在寻找替代方案...从仍然具有原始数据的位置传递整个字典

【讨论】:

    【解决方案2】:

    如果您的集合不是 KeyValuePairs 或其他具有 Key 和 Value 属性的类型的集合,则不能调用它们。所有值的集合就是该类型的集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多