C# 中匿名函数内部变量的作用域

发布于 2024-09-02 18:44:11 字数 633 浏览 4 评论 0原文

我对 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 出现以下错误: [Practice 是命名空间 Practice 中的一个类]

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

《C#图解2008》(第373页)一书中提到,int变量y在del2定义的范围内。 那为什么会出现这些错误呢。

I have a doubt in scope of varibles inside anonymous functions in C#.

Consider the program below:

 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();
        }

My VS2008 IDE gives the following errors:
[Practice is a class inside namespace Practice]

1.error CS1643: Not all code paths return a value in anonymous method of type 'Practice.Practice.OtherDel'
2.error CS1593: Delegate 'OtherDel' does not take '0' arguments.

It is told in a book: Illustrated C# 2008(Page 373) that the int variable y is inside the scope of del2 definition.
Then why these errors.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心安伴我暖 2024-09-09 18:44:11

两个问题;

  1. 您没有将任何内容传递到 del2() 调用中,但它 (OtherDel) 需要一个您不使用的整数 - 您不过,仍然需要提供它(如果您不使用匿名方法,则默默地让您不必声明参数 - 它们仍然存在 - 您的方法本质上del2 =相同delegate(int notUsed) {...})
  2. 委托 (OtherDel) 必须返回一个 int - 你的方法没有

作用域。

Two problem;

  1. you aren't passing anything into your del2() invoke, but it (OtherDel) takes an integer that you don't use - you still need to supply it, though (anonymous methods silently let you not declare the params if you don't use them - they still exist, though - your method is essentially the same as del2 = delegate(int notUsed) {...})
  2. the delegate (OtherDel) must return an int - your method doesn't

The scoping is fine.

凉宸 2024-09-09 18:44:11

该错误与范围无关。您的委托必须返回一个整数值并采用一个整数值作为参数:

del2 = someInt =>
{
    Console.WriteLine("{0}", y);
    return 17;
};
int result = del2(5);

因此您的代码可能如下所示:

delegate int OtherDel(int x);
public static void Main()
{
    int y = 4;
    OtherDel del = x =>
    {
        Console.WriteLine("{0}", x);
        return x;
    };
    int result = del(y);
}

The error has nothing to do with scopes. Your delegate must return an integer value and take an integer value as parameter:

del2 = someInt =>
{
    Console.WriteLine("{0}", y);
    return 17;
};
int result = del2(5);

So your code might look like this:

delegate int OtherDel(int x);
public static void Main()
{
    int y = 4;
    OtherDel del = x =>
    {
        Console.WriteLine("{0}", x);
        return x;
    };
    int result = del(y);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文