C# 使用LINQ从具有特定名称的数组中获取游戏对象
我用foreach循环写了一些代码,但它看起来很难看,我想把它翻译成LINQ版本,但我不知道怎么做 (对不起,我是LINQ新手)有人能告诉我下面给出的代码的LINQ方式吗C# 使用LINQ从具有特定名称的数组中获取游戏对象,c#,linq,unity3d,C#,Linq,Unity3d,我用foreach循环写了一些代码,但它看起来很难看,我想把它翻译成LINQ版本,但我不知道怎么做 (对不起,我是LINQ新手)有人能告诉我下面给出的代码的LINQ方式吗 GameObject[] everything = Resources.FindObjectsOfTypeAll( typeof(GameObject)) as GameObject[]; GameObject layoutCon
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方法中,我使用了{}这个动作用大括号括起来,编译器说“不是所有的代码路径都返回一个值”,现在我明白了,我只需要将逻辑作为参数而不是动作传递。您的错误来自作用域大括号。去掉这些,在我写代码的时候使用代码,你应该都准备好了。是的,我做了,现在一切都好了