【问题标题】:Cast IEnumerable<T> to ObservableCollection<T> without constructor injection the IEnumerable<T>将 IEnumerable<T> 强制转换为 ObservableCollection<T> 而无需构造函数注入 IEnumerable<T>
【发布时间】:2011-03-17 15:22:33
【问题描述】:

我该怎么做?

这是不行的:

ObservableCollection obsCol = new ObservableCollection(myIEnumerable);

场景:

var query = from c in customers
                    select new Customer()
                    {
                       Products = from p in products
                                  where p.Id = c.Id
                                  select p
};

Products 是一个 ObservableCollection,因此它不能从上面的选择中获取 IEnumerable 结果...

如何投射?

【问题讨论】:

    标签: ienumerable observablecollection casting


    【解决方案1】:

    像这样:

    ObservableCollection obsCol = new ObservableCollection(myIEnumerable.ToList());
    

    请注意,ObservableCollection 实例不会反映对customers 列表的更改。

    EDIT:Select 扩展方法返回编译器生成的迭代器类的实例。由于该类不继承ObservableCollection,因此无法将其强制转换为一个。

    【讨论】:

    • 请阅读我的 no go 声明,然后编辑您的答案,谢谢。
    • @msfanboy:根据定义,以任何其他方式完全不可能做到这一点。请阅读有关演员表和课程的信息,然后编辑您的问题,谢谢。
    • Select 扩展方法返回编译器生成的迭代器类的实例。由于该类不继承ObservableCollection,因此不可能将其强制转换为一个。
    • @SLaks 如果您将其放在答案中,我会将您的最后一条评论标记为答案... :) 似乎 Linq + IEnumerable + ObservableCollection + 聚合业务对象是一个糟糕的选择...跨度>
    • @msfanboy:给你。请注意,写new ObservableCollection 没有任何问题。这不是一个糟糕的选择,它可以完美地工作。 (只要你明白变更事件是从哪里来的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2012-05-28
    • 2021-12-02
    相关资源
    最近更新 更多