C# 使用LINQ从具有特定名称的数组中获取游戏对象

C# 使用LINQ从具有特定名称的数组中获取游戏对象,c#,linq,unity3d,C#,Linq,Unity3d,我用foreach循环写了一些代码,但它看起来很难看,我想把它翻译成LINQ版本,但我不知道怎么做 (对不起,我是LINQ新手)有人能告诉我下面给出的代码的LINQ方式吗 GameObject[] everything = Resources.FindObjectsOfTypeAll( typeof(GameObject)) as GameObject[]; GameObject layoutCon

我用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;
            }
        }

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

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

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

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

GameObject layoutContainer = everything.FirstOrDefault(obj => obj.name == "LayoutContainer") ?? new GameObject();
GameObject layoutContainer = (from game in everything
                                          where game.name == "LayoutContainer"
                                          select game).FirstOrDefault();
这将获取第一个名为“LayoutContainer”的对象。如果没有具有该名称的对象,它将为其分配一个新对象。这与代码示例中显示的功能相同。

请尝试以下操作:

GameObject layoutContainer = (from game in everything
                                          where game.name == "LayoutContainer"
                                          select game).FirstOrDefault();
GameObject layoutContainer = (Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[])?
   .FirstOrDefault(x => x.name == "LayoutContainer") ?? new GameObject();
试试这个:

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

您正在寻找
FirstOrDefault
方法。类似于
layoutContainer=everything.FirstOrDefault(obj=>obj.name==“layoutcainer”)
感谢您的回复,它可以帮助您查找
FirstOrDefault
方法。类似于
layoutContainer=everything.FirstOrDefault(obj=>obj.name==“layoutContainer”)
感谢您的回复,感谢您的回答。我已经试过了,但在FirstOrDefault方法中,我使用了{}这个动作用大括号括起来,编译器说“不是所有的代码路径都返回一个值”,现在我明白了,我只需要将逻辑作为参数而不是动作传递。您的错误来自作用域大括号。把这些去掉,在我写代码的时候使用代码,你应该准备好了。是的,我做到了,现在一切都好了。谢谢你的回答。我已经试过了,但在FirstOrDefault方法中,我使用了{}这个动作用大括号括起来,编译器说“不是所有的代码路径都返回一个值”,现在我明白了,我只需要将逻辑作为参数而不是动作传递。您的错误来自作用域大括号。去掉这些,在我写代码的时候使用代码,你应该都准备好了。是的,我做了,现在一切都好了