2011-09-08 74 views
6

可能重複:
C# 3.0 generic type inference - passing a delegate as a function parameter爲什麼不能推斷這些類型的參數?

爲什麼不能在Main調用下面的代碼示例的類型參數推斷?

using System; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Method(Action); 
    } 

    static void Action(int arg) 
    { 
     // ... 
    } 

    static void Method<T>(Action<T> action) 
    { 
     // ... 
    } 
} 

這給出了以下錯誤消息:

錯誤CS0411:用於方法Program.Method<T>(System.Action<T>) 類型參數不能從使用推斷。嘗試明確指定類型參數。

+0

非常感謝。已搜查但我找不到它。 –

+0

@Pieter:達林提到的帖子有答案,並有一些很好的鏈接到更多的信息。 –

+0

閱讀10篇文章或其他內容,但上面的文章不在其中。 –

回答

0

只要把這是一個編譯器我明白你的意思。

我認爲這是因爲Action被用作方法組,但它不是Action<int>類型。

如果你將它轉換爲這種類型的工作原理:

Method((Action<int>)Action); 
+5

我期望它是int。我猜OP已經知道編譯器告訴他了什麼。 –

+0

是的,直到我把它放在編譯器中,我沒有發佈問題的上下文。 Action不是很明顯,而是指該方法。 – TheCodeKing

0

這工作:

static void Main(string[] args) 
    { 
     Method<int>(Action); 
    } 

    static void Action(int arg) 
    { 
     // ... 
    } 

    static void Method<T>(Action<T> action) 
    { 
     // ... 
    } 
+1

是的,但這不是問題。所問的是爲什麼OP **顯示的內容不能工作。 –

2

的問題是,Action(除了已經是一個類型,請將其重命名)實際上是可轉換爲委託類型的方法組Action<int>。類型推斷引擎不能推斷類型,因爲方法組表達式是無類型。如果您實際將方法組投影到Action<int>,則輸入推論成功:

Method((Action<int>)Action); // Legal 
相關問題