我有一个基类型,从中继承了3个不同的对象。让我们调用基础对象B,继承X,Y和Z.现在我的字典有一个int作为键,分别是X,Y,Z作为值。
我有一个控件,需要在一个且只有一个特定字典中进行查找以绘制自己,但是为了能够处理我的所有三个字典,我尝试指定控件应该采用等于的参数Dictionary<int, B>
。但这不起作用。
那么我的选择是什么?我希望我的控件可以使用<int, B>
形式的所有词典。
答案 0 :(得分:7)
制作如下通用方法:
public void DoSomething<T>(IDictionary<int, T> dictionary) where T : B
或类似地使控件本身通用(这会给你的设计师带来问题,但是......)
public class MyControl<T> where T : B
{
private IDictionary<int, T> dictionary;
...
}
由于通用不变性,您需要执行此操作。即使在C#4(支持某些方差)中,这也是不变的:字典使用输入和输出的值。
想象一下,您可以从Dictionary<int, X>
转换为Dictionary<int, B>
。然后你就可以写下:
dictionary[0] = new B();
...这显然不适用于字典,因为它不是X
......