与字典的多态性

Kas*_*dum 1 .net c# generics

我有一个基类型,从中继承了3个不同的对象.让我们调用基础对象B,继承X,Y和Z.现在我的字典有一个int作为键,分别是X,Y,Z作为值.

我一直认为需要做的查找在一个只有特定的一个词典画本身,而是能够与所有三个我的词典我想指定的控制应该等于一个参数的工作控制Dictionary<int, B>.但这没用.

那么我的选择是什么?我希望我的控件可以与表单的所有字典一起使用<int, B>.

Jon*_*eet 7

制作这样的通用方法:

public void DoSomething<T>(IDictionary<int, T> dictionary) where T : B
Run Code Online (Sandbox Code Playgroud)

或者类似地使控件本身通用(这会给你的设计师带来问题,但......)

public class MyControl<T> where T : B
{
    private IDictionary<int, T> dictionary;
    ...
}
Run Code Online (Sandbox Code Playgroud)

由于通用不变性,您需要这样做.即使在C#4(支持一些方差)中,这也是不变的:字典使用输入输出的值.

想象一下,你可以转换Dictionary<int, X>Dictionary<int, B>.然后你就可以写:

dictionary[0] = new B();
Run Code Online (Sandbox Code Playgroud)

......这显然不适用于字典,因为它不是X......