[英]How does the compiler infer types in the delegate example?
在下面的委托示例中,编译器如何推断变量alpha的类型是什么?
delegate double Doubler(double x);
public class Test
{
Doubler dbl = (alpha) => //How does it determine what type is alpha?
{
return alpha * 2
};
Console.WriteLine(dbl(10)); //Is it when the method is called? int here;
Console.WriteLine(dbl(5.5)); //double here???
}
我在一个网站上发现了这个声明,我想根据回答,这是不正确的?
“在我们的例子中,我们指定了参数的类型。如果你愿意,你可以让编译器找出参数的类型。在这种情况下,只传递参数的名称而不是它的类型。这是一个例子: “
您在委托中声明它。
delegate double Doubler(double x);
x是你的alpha。
您可以使用以下命令轻松替换代码:
Doubler dbl = delegate (double x)
{
return x*2;
};
您还可以简化lambda表达式:
Doubler dbl = alpha => alpha*2;
这种语言功能看起来很简单,但实际上非常复杂。 这里需要花费太多空间来准确描述此功能的所有后果。 如果您真的对编译器如何计算lambda的形参的类型感兴趣,那么您应该阅读我讨论如何执行此操作的五篇系列文章,以及对编译器设计的后果。
这是我所有文章的存档,我讨论了lambda表达式的含义:
http://blogs.msdn.com/ericlippert/archive/tags/Lambda+Expressions/default.aspx
您应该阅读题为“Lambda表达式与匿名方法”的系列。
如果您对编译器如何执行其他类型推断感兴趣,请参阅我的文章存档:
http://blogs.msdn.com/ericlippert/archive/tags/Type+Inference/default.aspx
如果你是那种喜欢观看视频阅读文字的人,这里是我在2006年制作的视频,解释了一些类型推断场景:
http://blogs.msdn.com/ericlippert/archive/2006/11/17/a-face-made-for-email-part-three.aspx
您在定义Doubler委托时指定了输入类型为double。 对于这两个示例,输入类型是double。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.