首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnityEngine.GameObject对Generic.List<UnityEngine.GameObject>

UnityEngine.GameObject对Generic.List<UnityEngine.GameObject>
EN

Stack Overflow用户
提问于 2018-04-13 01:35:35
回答 2查看 1.3K关注 0票数 1
代码语言:javascript
复制
public void FindClosestEnemy()
{
    List<GameObject> pList = GameObject.FindGameObjectsWithTag("Player");                             
    pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, 
obj.transform.position)).ToList();
}

我不明白这两份名单的不同之处。如何将“System.Collections.Generic.List>UnityEngine.GameObject<”列表转换为UnityEngine.GameObject[]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-13 03:45:00

GameObject.FindGameObjectsWithTag返回数组 of GameObjects。

数组 in C#是存储同一类型的多个对象的数据结构。

列表是对象的泛型集合。

虽然数组和列表在概念上非常相似,但两者在数据访问和使用方面存在差异。通常,数组在创建时只填充一次,然后才会读取,而列表可以随时更改其元素(适用一些警告)。

这个StackOverflow问题总结了为什么您可能想要一个而另一个:*何时使用哪一种?

在特定情况下,您希望对GameObject集合应用一些Linq排序,因此需要将从FindGameObjectsWithTag接收的数组转换为列表。

你可以用几种方式做到这一点。最简单的方法是使用列表上的构造函数重载来同时分配整个数组:

代码语言:javascript
复制
GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");
List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);

这里还有其他一些选项:将System.Array转换为列表

票数 3
EN

Stack Overflow用户

发布于 2018-04-13 05:24:40

正如Steve正确解释的那样,但我想以一种稍微不同的方式回答:

实际上,在您的代码中,您将将数组类型对象(GameObject.FindGameObjectsWithTag("Player"))分配给列表类型(List<GameObject> pList )对象,编译器不隐式支持该对象。必须将列表转换为数组类型:

代码语言:javascript
复制
List<GameObject> pList = new List<GameObject>(GameObject.FindGameObjectsWithTag("Player"));

在此之后,您将能够使用您的代码。

现在是问题的第一部分

我不明白这两份名单的不同之处。

实际上,您询问的是不同的b/w数组和列表,需要记住的主要区别是,当您有固定的数据长度时,您应该使用数组,如果您有可变的数据长度,那么就使用List.。

您还可以在堆栈溢出上找到有关此主题的详细信息。

  1. 数组与列表:何时使用哪一种?
  2. 如何以及何时在C#中放弃数组的使用?
  3. 为什么我们使用数组而不是其他数据结构?
  4. MSDN的列表解释
  5. 数组被认为是有害的
  6. 我应该是用户数组还是列表
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49808061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档