C#如何查找Class的非创建对象?

时间:2013-03-15 17:32:34

标签: c# class linked-list

我有这个班级

class Node
{
    public bool is_end;
    public int prefix_count;
    public Node[] child = new Node[26];
}

我的问题是,该类只在必要时才创建节点,但是稍后在程序中,我需要检查所有创建的节点,但是因为我不知道创建了哪些节点,所以我不能使用为它循环。

有没有办法让我知道创建了哪些节点,是否有代码来检查该节点是否存在。

3 个答案:

答案 0 :(得分:4)

尝试使用List<Node>而不是固定长度的数组。然后你可以使用诸如

之类的方法
var nodeList = new List<Node>();
nodeList.Add(someRandomNode);
if (nodeList.Contains(someRandomNode)) 
{
    // your logic
}

您也可以迭代Node集合。

foreach(var node in nodeList) { }

答案 1 :(得分:3)

在这种情况下,您的child数组已预先创建,但未分配每个单独的节点。您可以查看null以查看是否已创建Node

bool ChildCreated(Node parent, int childIndex)
{
    return parent.child[childIndex] != null;
}

  

我必须找出创建了哪些子节点,例如从0到25的循环,并且必须给出像节点[2]和节点[11]这样的消息,其他则不是。

使用此方法,您可以轻松完成:

var created = Enumerable.Range(0, node.child.Length).Where(i => ChildCreated(node, i)).ToList();
if (!created.Any())
{
    Console.WriteLine("No children created.");
}
else
{
    Console.WriteLine("Children {0} created, all others aren't.", string.Join(", ", created));
}

答案 2 :(得分:1)

您需要做的就是检查Node[]元素是否为空:

int nodeIndex = 0;
if(child[nodeIndex] == null)
{
    // node doesn't exist
}
else
{
    // node exists
}