我对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.error CS1643:并非所有代码路径都在“Practice.Practice.OtherDel”类型的匿名方法中返回值 2.error CS1593:委托'OtherDel'不接受'0'参数。
在一本书中说明:插图C#2008(页373),int变量y在 del2定义的范围内。 那么为什么会出现这些错误。
答案 0 :(得分:4)
两个问题;
del2()
调用中传递任何内容,但它(OtherDel
)采用您不使用的整数 - 您仍然需要提供它虽然(匿名方法默默地让你不要声明params,如果你不使用它们 - 它们仍然存在 - 但你的方法本质上与del2 = delegate(int notUsed) {...}
相同)OtherDel
)必须返回int
- 您的方法不会范围很好。
答案 1 :(得分:2)
错误与范围无关。您的委托必须返回一个整数值并将整数值作为参数:
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);
}