由于各种原因,我已经实现了自己的集合类。如何避免铸造失败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);
- 3 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消