2016-02-02 76 views
2
  1. 的问题

我想foreach循环转换为LINQ声明。转换foreach循环LINQ

  • 的详细
  • 我有以下统一类(从元数据,去除了大部分的函数)

    public class Transform : Component, IEnumerable 
    { 
        public IEnumerator GetEnumerator(); 
    } 
    

    我有这个类的局部变量(继承)在我自己的类中,它是

    Transform transform; 
    

    在此我可以做

    List<Transform> children = new List<Transform>(); 
    foreach (Transform t in transform) 
        children.Add(t); 
    

    我如何可以做同样的LINQ表达式?

    +1

    避免'var'。 –

    +1

    '孩子=变形。铸造().ToList();'为你工作? – Enigmativity

    +0

    我会编辑,虽然类型直接在右侧。 –

    回答

    8

    它必须是为了获得访问LINQ表达式的IEnumerable<T>

    一个从IEnumerable转换为IEnumerable<T>的方法是使用OfType<T>Cast<T>扩展方法(如果你知道的类型)。

    例如如果你想让我们明白你的问题

    List<Transform> transforms = transform.Cast<Transform>().ToList(); 
    

    又见Does LINQ work with IEnumerable

    +1

    这很快,这是工作。铸造魔法。 :) –

    +3

    谢谢!我只是让我的10k代表。呜呼! :) –

    4

    您可以使用Enumerable.Cast如果Transform没有实现IEnumerable<Transform>

    List<Transform> children = transform.Cast<Transform>().ToList(); 
    

    否则就这么简单:

    List<Transform> children = transform.ToList(); 
    
    +0

    问题不在于'Transform'是否实现了接口,但是如果'transform'-list的确如此。 – HimBromBeere

    +0

    你编辑了吗?我认为这有点不同。无论如何,我会把你的答案从原始文章中得到的解决方案,以良好的格式。谢谢! –

    +1

    @AndreasReiff:不,第一版。等待几秒钟后我添加了_“如果Transform没有实现IEnumerable ”_ –