我对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/