EF实体一对多的时候 virtual 属性如果是个集合 到底用List<T> 还是IEnumerable<T> 还是用ICollection<T>,有什么区别
看实际用途用,使用时区别,IEnumerable<T> 读,ICollection<T>功能更多可Add/Remove,List<T>更多 还可以Index 查询。
public interface IEnumerable<out T> : IEnumerable { IEnumerator<T> GetEnumerator(); } public interface ICollection<T> : IEnumerable<T>, IEnumerable { int Count { get; } bool IsReadOnly { get; } void Add(T item); void Clear(); bool Contains(T item); void CopyTo(T[] array, int arrayIndex); bool Remove(T item); }
我个人觉得还是ICollection<T>比较好:
1. IEnumerable<T>是所有集合的基类,但是只实现了GetEnumerator()方法,可以使用foreach遍历,其他的都是扩展方法。
2. ICollection<T>,增加了一些元素,如Count、Add()、Remove()等属性或方法。
3. List<T>提供的操作更为齐全,但是倾向于对本集合中的元素进行些处理,像Sort()、Reverse()等方法。同时,List<T>作为导航属性也不灵活。我想通过导航属性添加多个对象到数据库,使用ICollection<T>时既可以指向一个list集合,也可以指向一个数组等,但是List类型的导航属性就只能指向list或其派生类型了。