相关疑难解决方法(0)

C# - 有什么方法可以投射通用集合吗?

我一直忙于C#4.0泛型,现在我基本上想做这样的事情:

public abstract class GenericTree<T> : Tree
    where T : Fruit
{
    public Tree(IFruitCollection<T> fruits)
        : base(fruits) { }
}
Run Code Online (Sandbox Code Playgroud)

基本Tree类如下所示:

public abstract class Tree
{
    private IFruitCollection<Fruit> fruits;

    public IFruitCollection<Fruit> GetFruits
    {
        get { return fruits; }
    }

    public Tree(IFruitCollection<Fruit> fruits)
    {
        this.fruits = fruits;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的第一个问题.GenericTree的构造函数无法将泛型集合强制转换为水果集合.我也有GenericTree的实现:

public class AppleTree : GenericTree<Apple>
{
    public AppleTree()
        : base(new FruitCollection<Apple>) { }
}
Run Code Online (Sandbox Code Playgroud)

这是我的第二个问题.当我使用myAppleTree.GetFruits.Add(...)向AppleTree实例添加水果时,我不仅限于苹果.我被允许添加各种水果.我不想要这个.

我试图通过将其添加到GenericTree来解决该问题:

new public IFruitCollection<T> GetFruits
{
    get { return base.GetFruits as IFruitCollection<T>; }
}
Run Code Online (Sandbox Code Playgroud)

但这也是不可能的.它总是以null返回null.当我的第一个问题得到解决时,这可能会得到解决.

IFruitCollection接口如下所示: …

.net c# generics casting c#-4.0

6
推荐指数
1
解决办法
635
查看次数

标签 统计

.net ×1

c# ×1

c#-4.0 ×1

casting ×1

generics ×1