使用带有接口的字典作为方法参数的值

时间:2017-10-19 15:34:15

标签: c#

为什么不能传递

Dictionary<string, PinkLady>()

进入我的Supply(Dictionary<string, IApple> apples)方法?

public interface IApple { }

public class PinkLady : IApple { }

public void Supply(Dictionary<string, IApple> apples) { }

public void TestMethod()
{
    //Working
    Supply(new Dictionary<string, IApple>());

    //Not working
    Supply(new Dictionary<string, PinkLady>());
}

我总是收到错误:

  

无法从Dictionary转换为Dictionary。 PinkLady与预期类型IApple不匹配。

1 个答案:

答案 0 :(得分:3)

因为Dictionary<string, IApple>Dictionary<string, PinkyLady>类型不是同一类型。 PinkyLady可能来自IApple,但这是Dictionary通用的背景。它们编译成两种不同的类型。

您可以采取的措施是使Support成为具有约束的通用方法:

public void Supply<T>(Dictionary<string, T> apples) where T : IApple { /* ... */ }