C#dynamic无法从基接口调用方法

C#dynamic无法从基接口调用方法,c#,dynamic,C#,Dynamic,以下面的代码为例: ICanQuack quack = new Duck(); var map = (object) "a map"; quack.Fly((dynamic)map); 使用这些类型 public interface ICanFly { void Fly<T>(T map); } public interface ICanQuack : ICanFly { void Quack(); } public class Duck : ICanQuack

以下面的代码为例:

ICanQuack quack = new Duck();
var map = (object) "a map";
quack.Fly((dynamic)map);
使用这些类型

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!");
    }
}
公共接口
{
虚蝇(T-map);
}
公共接口ICanQuack:ICanFly
{
虚无庸医();
}
公务舱鸭子:嘎嘎
{
公共空间飞行(T图)
{
WriteLine(“使用{0}映射({1})飞行)”,typeof(T).Name,map);
}
公众虚无庸医
{
控制台。WriteLine(“嘎嘎嘎嘎!”);
}
}
使用C#5编译器针对.NET 4.5.1进行编译(行为可能与使用较旧的编译器/框架版本相同),这会生成以下错误:


现在,我对封面下发生的事情有了一个非常好的想法(我在博客上写过),但是我不能给出一个令人满意的答案,为什么


看一看

我怀疑答案可能是“bug”:)但我稍后会看得更详细。有趣的问题!我猜
dynamic
不能用作泛型的类型参数,因为它不是实际的类型。@Aschratt这是一个嵌套接口问题。看看他的博客。根据凯尔斯的回答,你的问题可能是我同意格伦的重复<根据该错误消息,代码>动态似乎不知道基本接口。我不确定这是否适用于所有情况(因为我很少使用
dynamic
)。我猜修复程序也没有切入.NET4.5.1和2013编译器。