For Each语句带有构造函数列表?

时间:2015-03-13 00:22:01

标签: c# list constructor ienumerable ienumerator

我正在Unity中编写一个寻路脚本,我一直试图找出IEnumerables,我觉得我的互联网搜索措辞不正确,因为它根本不是我想要的。

我有3个脚本,1个查找节点,它添加到OpenNodes列表中,这是它自己的带有构造函数的脚本。我有一个IEnumerable,它仍然说它无法访问,或者只要公开它就需要是静态的。所以我的代码如下:

public class OpenNodes: IEnumerator, IEnumerable {
public static Vector3 node;
public static int g;

public static IEnumerator GetEnumerator()
{
    return (IEnumerator)this;
}

public OpenNodes(Vector3 newNode, int newGscore)
{
    node = newNode;
    g = newGscore;

}

所以我试图在另一个“FinderScript”中做的就是沿着这些方向:

foreach(Vector3 node in OpenNodes)

我一直在努力解决这个问题,但我从未在像这样的构造函数列表中工作过。这对我来说是新的,所以任何帮助,都会非常感激..谢谢

编辑: 每个都需要将节点作为vector3,因为它使用.x,.y和.z值进行比较和更改。

2 个答案:

答案 0 :(得分:0)

由于您需要为每个节点存储分数,因此您只需使用Dictionary<Vector3, int>来存储值。

e.g。

var nodes = new Dictionary<Vector3, int>();
nodes.add(node, gScore);

然后直接访问它们

nodes[node] = ...

或循环浏览

foreach (var node in nodes.Keys) {
   ...
}

或者,也许你可以创建一个将得分和节点映射在一起的对象(或者只是使用Pair然后只使用一个列表?

var nodes = new List<Vector3>();
var map = new Pair(node, gScore);
nodes.add(map);

然后按照惯例循环播放:

foreach (var node in nodes) {
   ...
}

不确定我是否理解正确,而且我还没有运行此代码。 HTH。

答案 1 :(得分:0)

我所面临的问题实际上更加简单。下面是我的构造函数列表的代码:

public class OpenNodes  {
public Vector3 node;
public int g;



public OpenNodes(Vector3 newNode, int newGscore)
{
    node = newNode;
    g = newGscore;

}


}

foreach的代码如下:

foreach(OpenNodes list in OpenNode)

填充列表如下:

OpenNode.Add(new OpenNodes(nodeLocation, 0 ));

删除项目如下:

OpenNode.RemoveAll(OpenNodes => nodeLocation == OpenNodes.node && 0 == OpenNodes.g);

并且访问我的节点只是:

list.node.x
list.node
list.node.z

等。

这将迭代列表中的每个项目作为列表,然后在此之后调用每个变量。我希望这段代码可以帮助将来的某个人!