2013-03-15 50 views
2

我有這個類C#如何找到一個類的非創建對象?

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

我的問題是,這個類只創建節點,如果它是必要的,但是後來在節目中,我需要檢查所有創建的節點,但因爲我不知道是哪個一些是創建的,我不能使用它的一個循環。

有沒有辦法讓我知道創建了哪些節點,是否有代碼來檢查這個節點是否存在。

+1

這不是100%清楚你在問什麼。你是否想要看到你的程序中的'Node'對象?或者僅僅是你的「孩子」數組中的那些? – robbrit 2013-03-15 17:35:11

+0

我必須找出創建哪些子節點,例如從0到25的一個週期,並且它必須給出類似於節點[2]和節點[11]的消息,其他則不是。 – imdrunkisuppose 2013-03-15 17:54:52

回答

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

是的,但如果我發送一個非創建的子對象的索引,它會給出空引用異常,因爲該對象沒有創建,它不會讓我把它與null進行比較,這就是問題所在。 – imdrunkisuppose 2013-03-15 17:44:53

+0

@imdrunkisuppose如果'parent'爲null,或者'child'屬性本身爲null,則此處的代碼段只會引發空引用異常。 'child'中的任何元素都可以爲null,只需訪問具有null值的元素就不會產生異常。 – 2013-03-15 17:49:58

+0

@imdrunkisuppose你可以隨時添加一個父母爲空的檢查,但我懷疑這將是一個實踐中的問題... – 2013-03-15 17:57:50

1

所有你需要做的是檢查是否Node[]元素爲null:

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) { } 
相關問題