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
{}