2016-02-02 114 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 」_ –