在Func体内调用Func

时间:2014-03-04 09:26:16

标签: c# oop delegates func

我遇到了一些麻烦,我写了一个Func,IDE不喜欢我在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();

1 个答案:

答案 0 :(得分:4)

这是不允许的,因为Func<XElement,TreeNode[]>的构造函数可能假设在arrayDel初始化之前调用函数,这意味着函数会观察到未初始化的变量。

由于知道不会发生这种情况,并且arrayDel在这种情况下所具有的值完全不相关,所以首先将变量初始化为某个虚拟值。 / p>

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