C# UnityEngine.GameObject与Generic.List的比较<;UnityEngine.GameObject>; public void FindClosestEnemy() { List pList=GameObject.FindGameObjectsWithTag(“玩家”); pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, obj.transform.position().ToList(); }

C# UnityEngine.GameObject与Generic.List的比较<;UnityEngine.GameObject>; public void FindClosestEnemy() { List pList=GameObject.FindGameObjectsWithTag(“玩家”); pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, obj.transform.position().ToList(); },c#,unity3d,C#,Unity3d,我不明白这两份清单之间的区别。如何将“UnityEngine.GameObject[]”列表转换为System.Collections.Generic.list>UnityEngine.GameObject返回游戏对象的数组 in C#是一种数据结构,它存储相同类型的多个对象 是对象的一般集合 虽然数组和列表在概念上非常相似,但两者在数据访问和使用方面存在差异。通常,数组在创建时只填充一次,然后再读取,而列表可以随时更改其元素(某些注意事项适用) 这个问题总结了为什么您可能想要一个而不是另一个:

我不明白这两份清单之间的区别。如何将“UnityEngine.GameObject[]”列表转换为System.Collections.Generic.list>UnityEngine.GameObject返回游戏对象的数组

in C#是一种数据结构,它存储相同类型的多个对象

是对象的一般集合

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

这个问题总结了为什么您可能想要一个而不是另一个:

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

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

public void FindClosestEnemy()
{
    List<GameObject> pList = GameObject.FindGameObjectsWithTag("Player");                             
    pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, 
obj.transform.position)).ToList();
}
GameObject[]gameObjectArray=GameObject.FindGameObjectsWithTag(“玩家”);
List gameObjectList=new List返回游戏对象的数组

in C#是一种数据结构,它存储相同类型的多个对象

是对象的一般集合

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

这个问题总结了为什么您可能想要一个而不是另一个:

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

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

public void FindClosestEnemy()
{
    List<GameObject> pList = GameObject.FindGameObjectsWithTag("Player");                             
    pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, 
obj.transform.position)).ToList();
}
GameObject[]gameObjectArray=GameObject.FindGameObjectsWithTag(“玩家”);

List gameObjectList=new ListAsSteve正确地解释了这一点,但我想以一种不同的方式回答:

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

GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");
List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);
List pList=新列表(GameObject.FindGameObjectsWithTag(“玩家”));
在此之后,您将能够使用您的代码

现在是问题的第一部分

我不明白这两份清单之间的区别

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

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


  • 正如Steve正确解释的那样,我想用一种不同的方式回答:

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

    GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");
    List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);
    
    List pList=新列表(GameObject.FindGameObjectsWithTag(“玩家”));
    
    在此之后,您将能够使用您的代码

    现在是问题的第一部分

    我不明白这两份清单之间的区别

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

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


  • 请多解释一点你们想要达到的目标。请多解释一点你们想要达到的目标。为什么Linq的列表更好?Linq也适用于数组。@船长,我倾向于几乎完全使用列表。我很少遇到阵列是更好的解决方案的情况。也许在记忆方面它们更好?我也几乎总是使用列表。当我想对Physical.Overlapphere的输出进行排序时,我只在数组中使用Linq。如果非要我猜的话,我认为数组的性能会更好,因为元素都是顺序的。内存访问等等。为什么Linq会让列表更好?Linq也适用于数组。@船长,我倾向于几乎完全使用列表。我很少遇到阵列是更好的解决方案的情况。也许在记忆方面它们更好?我也几乎总是使用列表。当我想对Physical.Overlapphere的输出进行排序时,我只在数组中使用Linq。如果非要我猜的话,我认为数组的性能会更好,因为元素都是顺序的。内存访问等等。