为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
萧十郎 2021-04-09 18:19:55
由于各种原因,我已经实现了自己的集合类。如何避免铸造失败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);。但这意味着我要避免再次遍历该集合。
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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);



查看完整回答
反对 回复 2021-04-17
  • 3 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信