【发布时间】:2015-03-23 17:41:43
【问题描述】:
我有以下代码(名称仅用于示例目的):
一些将数据作为字典提供给我的函数:
public Dictionary<IMayor, SocialStatus> GetMayorSocialStatuses()
{
//Do Stuff
}
public Dictionary<IJanitor, SocialStatus> GetJanitorSocialStatuses()
{
//Do Stuff
}
然后我尝试将这些结果添加到 IPerson 类型的字典中。
IJanitor 和 IMayor 都实现了 IPerson。
假设我没有问题,我尝试执行以下操作:
public Dictionary<IPerson,SocialStatus> GetPersonsSocialStatuses()
{
var dict=new Dictionary<IPerson,S ocialStatus>();
foreach(var mayorKvp in GetMayorSocialStatuses())
{
dict.Add(mayorKvp.Key,mayorKvp.Value);
}
foreach(var janitorKvp in GetJanitorSocialStatuses())
{
dict.add(janitorKvp.Key,janitorKvp.Value);
}
}
像魅力一样工作,但 foreach 看起来很恶心。
我已经尝试用这个扩展方法替换它们:
public static Dictionary<IPerson,SocialStatus> AddRange(
this Dictionary<IPerson,SocialStatus> dict,
Dictionary<IPerson,SocialStatus> inputDict)
{
foreach(var kvp in inputDict)
{
dict.add(kvp.Key,kvp.Value);
}
return dict;;
}
但是这样做时,我收到了一个编译错误,它无法从 IMayor,SocialStatus 类型的字典转换为 IPerson,SocialStatus。
在调查了这个问题后,我意识到它们是不可转换的,因为一种称为“关闭泛型”的方式,这意味着继承不会移动到字典中并且无法进行转换。
问题是:那我该如何解决这个问题呢?
没有更干净的方法吗?
(因为如果提供者不在同一个类/静态类中,我就完蛋了)
我没有绑定到特定版本的 .NET,所以任何解决方案都会很棒。
【问题讨论】:
标签: c# .net generics dictionary collections