我有以下课程
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Shop
{
public string Name { get; set; }
}
public class Xyz
{
public string Abc { get; set; }
}
为什么不允许以下
IDictionary<Person, IDictionary<Shop, Xyz>> blahItem
= new Dictionary<Person, Dictionary<Shop, Xyz>>();
答案 0 :(得分:3)
出于同样的原因你不能这样做:
IDictionary<string, Control> dict = new Dictionary<string, Button>();
假设允许......我们可以:
Dictionary buttonDict = new Dictionary<string, Button>();
IDictionary<string, Control> controlDict = buttonDict;
controlDict["bang"] = new TextArea();
Button error = buttonDict["bang"];
基本上你违反了类型安全 - IDictionary
在其键或值类型中不是协变。
搜索“通用差异”和“协方差”以查找更多详细信息,包括有限的支持(例如,对于IEnumerable<T>
可以以协变的方式安全使用)C#4