【问题标题】:UnityEngine.GameObject vs. Generic.List<UnityEngine.GameObject>UnityEngine.GameObject 与 Generic.List<UnityEngine.GameObject>
【发布时间】:2018-09-23 06:51:59
【问题描述】:
public void FindClosestEnemy()
{
    List<GameObject> pList = GameObject.FindGameObjectsWithTag("Player");                             
    pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, 
obj.transform.position)).ToList();
}

我不明白这两个列表之间的区别。如何将“UnityEngine.GameObject[]”列表转换为 System.Collections.Generic.List>UnityEngine.GameObject

【问题讨论】:

  • 请多解释一下你想要达到的目标。

标签: c# unity3d


【解决方案1】:

GameObject.FindGameObjectsWithTag 返回游戏对象的数组

C# 中的array 是一种数据结构,用于存储多个相同类型的对象。

list 是对象的通用集合。

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

这个 StackOverflow 问题总结了为什么您可能想要其中一个:Array versus List<T>: When to use which?

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

您可以通过多种方式做到这一点。最简单的方法是在 list 上使用构造函数重载来一次分配整个数组:

GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");
List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);

这里提供了一些其他选项:Conversion of System.Array to List

【讨论】:

  • 为什么 List 使用 Linq 更好? Linq 也适用于数组。
  • @captainCrazy 公平点,我倾向于几乎完全使用列表。我很少遇到数组是更好解决方案的情况。也许在记忆方面它们更好?
  • 我也几乎总是使用列表。当我想立即对 Physics.OverlapSphere 的输出进行排序时,我只将 Linq 与数组一起使用。如果我不得不猜测,我认为数组在性能方面可能会更好,因为元素都是顺序的。内存访问和东西。
【解决方案2】:

正如 Steve 正确解释,但我想以不同的方式回答:

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

List<GameObject> pList = new List<GameObject>(GameObject.FindGameObjectsWithTag("Player"));

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

现在是问题的第一部分

我不明白这两个列表之间的区别。

实际上,您是在询问不同的黑白数组和列表以及您需要记住的主要区别,当您有固定长度的数据时,您应该使用数组,如果您有可变长度的数据,然后你使用列表。

您还可以在 stackoverflow 上找到有关此主题的详细信息

  1. Array versus List: When to use which?
  2. How and when to abandon the use of arrays in C#?
  3. Why do we use arrays instead of other data structures?
  4. List explaniation by MSDN
  5. Arrays considered somewhat harmful
  6. Should I user array or list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多