2013-11-27 44 views
30

採取下面的代碼調用方法:在使用這些類型C#動態失敗從基站接口

public interface ICanFly 
{ 
    void Fly<T>(T map); 
} 

public interface ICanQuack : ICanFly 
{ 
    void Quack(); 
} 

public class Duck : ICanQuack 
{ 
    public void Fly<T>(T map) 
    { 
     Console.WriteLine("Flying using a {0} map ({1})", typeof (T).Name, map); 
    } 

    public void Quack() 
    { 
     Console.WriteLine("Quack Quack!"); 
    } 
} 

與C#5針對.NET 4.5.1編譯器編譯

ICanQuack quack = new Duck(); 
var map = (object) "a map"; 
quack.Fly((dynamic)map); 

(行爲可能是相同的使用較舊的編譯器/框架版本)這會產生以下錯誤: enter image description here

現在,我有一個不錯的想法什麼在幕後(我的博客上講述它here),但我不能拿出一個令人滿意的答案爲什麼下發生?

+4

我懷疑答案可能是「錯誤」 :)不過我會看在後面詳細。 –

+1

有趣的問題!我猜'dynamic'不能用作泛型的類型參數,因爲它不是實際的類型。 – Carsten

+2

@Aschratt這是一個嵌套的接口問題。看看他的博客。 – gleng

回答

14

我猜測這種情況已經報告給微軟。

看看here

+0

是的,看起來就是這樣。我想這個修補程序不會影響到.NET 4.5.1和2013編譯器。 –