合并相同类型的ICollection以返回组合在单个属性中

时间:2014-01-28 01:35:18

标签: c# asp.net generics

我有相同类型的ICollection

ICollection<Food> Fruits{get; set;}
ICollection<Food> Vegetable{get; set;}
ICollection<Food> IceCream{get; set;}

前两个是自动化的我想添加一个基本上看起来像

的AllFood
ICollection<Food> AllFood
{
   get
   {
      return Fruits.Concat(Vegetable).Concat(IceCream);
   }   
}

我似乎无法弄清楚这应该如何运作 - 我尝试了几种不同的方式 - 这种特殊方式会产生一条消息

无法将类型'System.Collections.Generic.IEnumerable隐式转换为'System.Collections.Generic.ICollection'存在显式转换,您错过了转换。

我应该提一下,这些项目有可能是“空”

1 个答案:

答案 0 :(得分:1)

问题是Concat()返回IEnumerable,而不是ICollection。要处理null问题,请考虑做(this.Fruits ?? Enumerable.Empty())。Concat ......

如果将属性类型更改为IEnumerable,它将起作用,但您将无法使用AllFood.Add()添加到集合中。

你也可以返回this.Fruits.Concat(this.Vegetable).... ToList()将返回ICollection。但是,这会在每次调用时创建列表的新副本。

如果您希望能够直接向AllFood添加新对象,则需要实现自定义集合类型。