使用LINQ从具有特定名称的数组中获取GameObject

时间:2019-07-16 13:15:19

标签: c# linq unity3d

我用foreach循环编写了一些代码,但是看起来很丑陋,我想将其转换为LINQ版本,但是我不知道该怎么做 (对不起,我是LINQ的新手),有人可以告诉我下面给出的LINQ代码的方式吗?

        GameObject[] everything = Resources.FindObjectsOfTypeAll(
                                 typeof(GameObject)) as GameObject[];
        GameObject layoutContainer = new GameObject();

        foreach (GameObject obj in everything) {
            if(obj.name == "LayoutContainer") {
                layoutContainer = obj;
                break;
            }
        }

3 个答案:

答案 0 :(得分:2)

您可以使用以下代码将其转换为LINQ:

GameObject layoutContainer = everything.FirstOrDefault(obj => obj.name == "LayoutContainer") ?? new GameObject();

这将捕获带有“ name”的“ LayoutContainer”的第一个对象。如果没有名称相同的对象,它将为其分配一个新对象。这与您的代码示例中显示的功能相同。

答案 1 :(得分:2)

GameObject layoutContainer = (from game in everything
                                          where game.name == "LayoutContainer"
                                          select game).FirstOrDefault();

答案 2 :(得分:1)

尝试一下:

GameObject layoutContainer = (Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[])?
   .FirstOrDefault(x => x.name == "LayoutContainer") ?? new GameObject();