C# 中匿名函数内部变量的作用域
我对 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
两个问题;
del2()
调用中,但它 (OtherDel
) 需要一个您不使用的整数 - 您不过,仍然需要提供它(如果您不使用匿名方法,则默默地让您不必声明参数 - 它们仍然存在 - 您的方法本质上与del2 =相同delegate(int notUsed) {...}
)OtherDel
) 必须返回一个int
- 你的方法没有作用域。
Two problem;
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 asdel2 = delegate(int notUsed) {...}
)OtherDel
) must return anint
- your method doesn'tThe scoping is fine.
该错误与范围无关。您的委托必须返回一个整数值并采用一个整数值作为参数:
因此您的代码可能如下所示:
The error has nothing to do with scopes. Your delegate must return an integer value and take an integer value as parameter:
So your code might look like this: