1

我有这个示例 summy 通用代码:

public class Box<E> where E : BoxProperties{
}

public class BoxProperties{
}

public class BlueBox : Box<BlueBox.BlueProperties >{
    public class BlueProperties : Properties{
    }
}

public class RedBox : Box<RedBox.RedProperties >{
    public class RedProperties : Properties{
    }
}

我需要创建一个可以将 RedBox 和 BlueBox 存储为值的字典。请问有什么帮助吗?

4

3 回答 3

3

使用您所描述的类型,BlueBox和之间最近的共同祖先类型RedBoxSystem.Object。您将不得不使用Dictionary<TKey, object>,或引入其他一些共同的祖先类型。

于 2013-09-11T17:12:50.940 回答
2

你可以做这样的事情 -

public class BoxProperties
{
}
interface IBox
{

}

public class Box<E> : IBox where E : BoxProperties
{
}

public class BlueBox : Box<BlueBox.BlueProperties>
{
    public class BlueProperties : BoxProperties
    {
    }
}

public class Properties
{
}

public class RedBox : Box<RedBox.RedProperties>
{
    public class RedProperties : BoxProperties
    {
    }
}

有了这个,你将能够做到 -

        var dictionary = new Dictionary<string, IBox>();
        dictionary.Add("a", new BlueBox());
        dictionary.Add("b", new RedBox());
于 2013-09-11T17:25:24.007 回答
2

我认为这取决于什么是类Box<E>

interface IBox<out E> where E : BoxProperties
{
}

public class Box<E> : IBox<E> where E : BoxProperties
{
}

public class BoxProperties
{
}

public class BlueBox : Box<BlueBox.BlueProperties>
{
    public class BlueProperties : BoxProperties
    {
    }
}

public class RedBox : Box<RedBox.RedProperties>
{
    public class RedProperties : BoxProperties
    {
    }
}

有了这个,你可以声明一个字典,如:

var dic = new Dictionary<string, IBox<BoxProperties>>();

dic.Add("red", new RedBox());
dic.Add("blue", new BlueBox());

out不可能最适合你,看看这个

于 2013-09-11T17:22:38.877 回答