【问题标题】:C# How to find a Class' non created objects?C#如何找到一个类的非创建对象?
【发布时间】:2013-03-04 12:54:51
【问题描述】:

我有这门课

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

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

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

【问题讨论】:

  • 您的要求不是 100% 清楚。您是否尝试查看程序中的所有 Node 对象?或者只是你的child 数组中的那些?
  • 我必须找出创建了哪些子节点,例如从 0 到 25 的循环,它必须给出一个消息,如 node[2] 和 node[11] 已创建,其他的则不是't。

标签: c# class linked-list


【解决方案1】:

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

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

我必须找出创建了哪些子节点,例如从 0 到 25 的循环,它必须给出一个消息,如 node[2] 和 node[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));
}

【讨论】:

  • 是的,但是如果我发送一个未创建的子对象的索引,它会给出空引用异常,因为该对象没有创建,它不会让我将它与空进行比较,那就是问题。
  • @imdrunkisuppose 这里的 sn-p 只会在 parent 为 null 或 child 属性本身为 null 时抛出 null 引用异常。 child 中的任何元素都可以为 null,简单地访问具有 null 值的元素不会产生异常。
  • @imdrunkisuppose 你总是可以添加一个检查 parent 是否为空,但我怀疑这在实践中会成为一个问题......
  • @imdrunkisuppose 根据您在评论中提到的内容,这将允许您这样做 - 我将向演示添加代码
【解决方案2】:

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

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

您还可以遍历您的 Node 集合。

foreach(var node in nodeList) { }

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 1970-01-01
      • 2017-04-11
      • 2018-04-11
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      相关资源
      最近更新 更多