2014-03-04 83 views
1

我遇到了一些麻煩,我寫了一個Func,IDE不喜歡我在Func體內調用Func,我不太明白爲什麼因爲如果我將相同的返回類型和參數參數放在方法體中,那麼它就可以工作。在函數體內調用Func

下面的代碼:

Func<XElement, TreeNode[]> arrayDel = new Func<XElement,TreeNode[]>(a => 
     { 
      List<TreeNode> nodes = new List<TreeNode>(); 
      foreach (XElement item in a.Elements()) 
      { 
       if (item.HasElements) 
       { 
        nodes.Add(new TreeNode(item.Name.ToString(), arrayDel(item))); } 
       else 
       { 
        nodes.Add(new TreeNode(item.Name.ToString())); } 
      } 
      return nodes.ToArray(); 
+0

你發佈的代碼適合我,看起來好像 – Cynede

+0

@Heather然後你可能把'arrayDel'作爲類的靜態/實例字段。即使在任何明確的初始化程序運行之前,這些都始終被初始化。如果你把它變成局部變量,它將不起作用。 – hvd

+0

@ hvd我看到了,明白了。 – Cynede

回答

4

這是不允許的,因爲Func<XElement,TreeNode[]>的構造可以假設arrayDel之前調用該函數被初始化,這意味着該函數將觀察到的未初始化變量。

由於知道這不會發生,這是arrayDel會在這種情況下,價值是完全不相干的,只是初始化變量一些虛擬的價值第一。

Func<XElement, TreeNode[]> arrayDel = null; 
arrayDel = new Func<XElement,TreeNode[]>(...); 
+0

@ Heather不,那不行。 'var'從初始化程序中取得它的類型,而不是從後面賦值給變量,'null'沒有類型。 – hvd

+0

是的,工作,非常感謝! :) –