我对C#匿名函数中的变量范围感到怀疑。

考虑下面的程序:

 delegate void OtherDel(int x);

        public static void Main()
        {
            OtherDel del2;
            {
                int y = 4;
                del2 = delegate
                {
                      Console.WriteLine("{0}", y);//Is y out of scope
                };
            }

           del2();
        }


我的VS2008 IDE出现以下错误:
[实践是名称空间实践中的一个类]

1.错误CS1643:并非所有代码路径都在类型为'Practice.Practice.OtherDel'的匿名方法中返回值
2.错误CS1593:委托'OtherDel'不接受'0'参数。

在一本书中被告知:图解C#2008(Page 373),int变量y在del2定义的范围内。
那么为什么会出现这些错误。

最佳答案

两个问题;


您没有将任何内容传递给您的del2()调用,但它(OtherDel)接受了一个您不使用的整数-尽管您仍然需要提供一个整数(匿名方法默许地让您不用声明参数,不要使用它们-尽管它们仍然存在-您的方法与del2 = delegate(int notUsed) {...}基本上相同)
委托(OtherDel)必须返回一个int-您的方法不


作用域很好。

关于c# - C#中匿名函数内部变量的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2890987/

10-10 14:57