C# 为什么可以';t编译器将派生类转换为它';当尝试将接口字典用作方法参数时,是否为s接口?

C# 为什么可以';t编译器将派生类转换为它';当尝试将接口字典用作方法参数时,是否为s接口?,c#,dictionary,inheritance,c#-4.0,interface,C#,Dictionary,Inheritance,C# 4.0,Interface,我正在尝试将字典传递到一个需要字典的方法中。当我这样做时,编译器抛出以下错误消息 无法从一个字典转换到另一个字典 下面是我试图做的一个简化版本。编译错误发生在调用Test(aDict)的地方 使用系统; 使用System.Collections.Generic; 公共课程 { 公共静态void Main() { var aDict=新字典(); 试验(aDict); } 无效测试(字典dict) {} } 公共接口IBase {} 派生的公共类:IBase {} 如果有人能告诉我如何做到这一点

我正在尝试将
字典
传递到一个需要
字典
的方法中。当我这样做时,编译器抛出以下错误消息

无法从一个字典转换到另一个字典

下面是我试图做的一个简化版本。编译错误发生在调用
Test(aDict)的地方

使用系统;
使用System.Collections.Generic;
公共课程
{
公共静态void Main()
{
var aDict=新字典();
试验(aDict);
}
无效测试(字典dict)
{}
}
公共接口IBase
{}
派生的公共类:IBase
{}
如果有人能告诉我如何做到这一点而不出现异常,或者解释为什么不能用c#实现,我将不胜感激

假设它可以。还假设还有另一个类,
IBase
,它实现了
IBase
。假设
Test
这样做:

void Test(Dictionary<string, IBase> dict)
{
    dict.Add("EvliKey", new EvilDerived());
}
但是,由于您没有显示您正在使用
Test
做什么,因此不可能知道这是否适用于您

void Test(Dictionary<string, IBase> dict)
{
    dict.Add("EvliKey", new EvilDerived());
}
void Test<T>(Dictionary<string, T> dict) where T : IBase
{}