c# - 在 Func 体内调用 Func

标签 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();

最佳答案

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

因为知道那不会发生,而且arrayDel的值(value)在那种情况下会完全无关紧要,只需先将变量初始化为某个虚拟值即可。

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

关于c# - 在 Func 体内调用 Func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167755/

相关文章:

c# - ffmpeg 波形音频和 avi 视频格式合并

java - 使用 map 与枚举

ios - 类型 'UIViewController' 的值没有成员 'newExerciseDelegate'

objective-c - 关于 NSRunLoop,需要澄清

c# - 将 XML 文档转换为对象列表的 LINQ 查询导致异常

c# - 使用从 Win32 API CreateFile(C++、P/Invoke)返回的句柄创建的 FileStream 对象(.NETCF、C#)是否容易发生 .NET 垃圾收集

ruby - Ruby 可以存储的对象数量是否存在理论上的限制?

c++ - 指针模板数组 C++?

ios - UILongPressGestureRecognizer 未调用其目标方法

c# - 如何仅在 MVC3 应用程序中选择某个元素时创建新的下拉列表?