[英]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.