2013-03-15 3 views
2

У меня есть этот классC# Как найти не созданные объекты класса?

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

Моя проблема, класс создает только узлы, если это необходимо, но позже в программе, мне нужно, чтобы проверить все созданные узлы, хотя, так как я не знаю, какой они созданы, я не могу использовать для этого цикл.

Есть ли способ узнать, какие узлы созданы, есть ли код для проверки, существует ли этот узел или нет.

+1

Это не на 100% ясно, что вы просите. Вы пытаетесь увидеть _all_ объекты 'Node' в своей программе? Или просто в массиве 'child'? – robbrit

+0

Я должен выяснить, какие дочерние узлы созданы, например, цикл от 0 до 25, и он должен дать сообщение, подобное узлу [2], и узел [11], другие - нет. – imdrunkisuppose

ответ

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)); 
} 
+0

Да, но если я отправляю индекс не созданного дочернего объекта, он дает исключение для ссылочной ссылки, так как объект не создан, он не позволит мне сравнить его с нулем, вот и проблема. – imdrunkisuppose

+0

@imdrunkisuppose. В этом фрагменте будет выведено исключение с нулевой ссылкой, если 'parent' равно null или если свойство' child' равно null. Любой элемент в 'child' может быть нулевым, просто доступ к элементу с нулевым значением не вызывает исключения. –

+0

@imdrunkisuppose Вы всегда можете добавить чек для родителя, равный нулю, но я сомневаюсь, что это будет на практике ... –

1

Все, что вам нужно сделать, это проверить, если Node[] элемента является пустым:

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

Попробуйте с помощью List<Node> вместо массива фиксированной длины. Затем вы можете использовать методы, такие как

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

Вы также можете перебирать вашей Node коллекции.

foreach(var node in nodeList) { } 
Смежные вопросы