[英]Why cannot infer types of delegate parameters?
我可以这样写:
new Thread(new ParameterizedThreadStart((x) => //**parameter type not specified explicitly**
{
for (int j = 0; j < Convert.ToInt32(x); j++)
{
Console.WriteLine(j);
}
})).Start(5);
我可以这样写:
new Thread(new ParameterizedThreadStart(delegate(object x) //**parameter type specified explicitly**
{
for (int j = 0; j < Convert.ToInt32(x); j++)
{
Console.WriteLine(j);
}
})).Start(5);
但是我不能这样写:
30 new Thread(new ParameterizedThreadStart(delegate(x) //**parameter type not specified explicitly**
31 {
32 for (int j = 0; j < Convert.ToInt32(x); j++)
33 {
34 Console.WriteLine(j);
35 }
36 })).Start(5);
它给出了多个错误:
为什么委托不能推断参数类型? 语言设计决定?
定义匿名方法的方法有很多种,这是其中一种:
delegate(object x)
{
}
当您使用这种语法时,您必须指定参数类型.delegates无法推断参数类型,其原因与您所说的语言设计决定有关,并且与语法有关。当您使用lambda语法时:
(x) => { ... }
编译器在后台创建委托类型和方法。
注意:也许这个答案没有足够的解释,但是您可以看一下这篇文章来了解其中的区别
尽管它们相似,但匿名委托与lambda表达式不同,它们遵循不同的规则。 lambda表达式中的参数类型可以隐式推断,但是匿名委托要求您显式指定类型。
是的,这是语言设计的决定。 引入了Lambda表达式来支持Linq,并且要求显式声明参数类型将使语法不太方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.