我有2个词典。如何将DerivedClass字典分配给DerivedClass字典?
下面的代码没有问题?
如何更改?
public class BaseClass
{
public void DoWork() { }
public int WorkField;
public int WorkProperty
{
get { return 0; }
}
}
public class DerivedClass : BaseClass
{
public new void DoWork() { }
public new int WorkField;
public new int WorkProperty
{
get { return 0; }
}
}
class Program
{
static void Main(string[] args)
{
var derivedclass = new Dictionary<string, DerivedClass>();
var baseClass = new Dictionary<string, BaseClass>();
Dictionary<string, BaseClass> AAA = derivedclass;
Console.ReadKey();
}
}
答案 0 :(得分:2)
你不能直接施放字典,但你可以创建一个新的字典,这样的东西可以工作:
Dictionary<string, BaseClass> AAA =
derivedclass.ToDictionary(
k => k.Key,
v => (BaseClass)v.Value);
答案 1 :(得分:1)
你做不到。 Dictionary
(以及C#中的所有类)在其泛型参数方面是不变的。
即使C#工作以支持类上的泛型类型方差(而不仅仅是接口和委托),Dictionary
在概念上对于字典值的类型也不是不变的。您可以向字典中添加新值,因此如果您可以将Dictionary<int, Tiger>
强制转换为Dictionary<int, Animal>
,那么您可以将Chicken
放入该老虎字典中,我们都知道这有多好会结束。
如果你有一个IReadOnlyDictionary
接口,它可能在值的类型方面是协变的,尽管.NET实现不是。