如何将List <T>投射到我自己的收藏夹中

由于各种原因,我已经实现了自己的集合类。如何避免铸造失败ItemCollection resultCollection = (ItemCollection)list;?我是继承人,List<T>所以我不应该投射吗?我可以修改我的BaseEntityCollection能力以使其能够执行此操作吗?


static class Program

{

    static void Main()

    {

        ItemCollection collection = new ItemCollection();

        Item item = new Item();

        item.ID = 1;

        item.Name = "John";

        collection.Add(item);

        List<Item> list = collection.FindAll(x => x.ID == 1 && x.Name == "John");


        ItemCollection resultCollection = (ItemCollection)list; // It's breaking here

    }

}



public class ItemCollection : BaseEntityCollection<Item>

{

}


public class Item : BaseEntity

{

    public int ID { get; set; }

    public string Name { get; set; }

}


public abstract class BaseEntityCollection<T> : List<T>, IEnumerable<T> where T : BaseEntity, new()

{

}


public abstract class BaseEntity

{

}

我知道我可以FindAll在其上单独实现,ItemCollection但是我想利用上可用的所有方法List<T>。


我也知道我能做到list.ForEach(resultCollection.Add);。但这意味着我要避免再次遍历该集合。


萧十郎
浏览 106回答 3
3回答

一只斗牛犬

ItemCollection resultCollection = new ItemCollection();resultCollection.AddRange(collection.Where(x => x.ID == 1 && x.Name == "John"));如果碰巧您没有AddRange扩展方法,请使用它。void AddRange<T>(this ItemCollection c, IEnumerable<T> items) => foreach(T i in items) c.Add(i);
打开App,查看更多内容
随时随地看视频慕课网APP