将foreach循环转换为linq

时间:2016-02-02 12:37:38

标签: c# linq unity3d foreach

  1. 问题
  2. 我想将foreach循环转换为linq语句。

    1. 详情
    2. 我有以下统一类(来自元数据,删除了大部分功能)

      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表达式中执行相同的操作?

2 个答案:

答案 0 :(得分:8)

它必须是IEnumerable<T>才能访问LINQ表达式。

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

e.g。

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

另见Does LINQ work with IEnumerable

答案 1 :(得分:4)

如果Enumerable.Cast未实施Transform,您可以使用IEnumerable<Transform>

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

否则它很简单:

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