哪些类型继承自ICollection?

时间:2017-05-11 20:54:04

标签: c# entity-framework icollection

我不知道为什么我今天在谷歌遇到这样的麻烦。我想知道哪些类型(如果有的话)继承自ICollection接口。在保存到数据库之前将多个实体推送到ICollection的实例中非常重要,但我不知道应该将它们推入哪种类型。

更新: 问题得到了回答,但我想确保用一种不那么令人困惑的方式来表达它(第三次尝试)。更具体地说,我需要一个继承自ICollection的特定类型。我使用实体框架,实体类包含ICollection类型的虚拟属性。我想通过更新主实体上的一个属性来更新相关实体。但这意味着我需要首先将相关实体的所有实例都推送到ICollection中。但是,我不清楚哪些类型继承自ICollection。

3 个答案:

答案 0 :(得分:2)

我只会使用List对象,这通常是最容易处理的。

该代码看起来应该是这样的

var entities = new List<EntityType> { entity1, entity2 };

var entities = new List<EntityType>();
entities.add(entity1);
entities.add(entity2);

以下是ICollection备注供您参考:

ICollection<T>接口是System.Collections.Generic命名空间中的类的基本接口。

ICollection<T>界面扩展IEnumerable<T>

IDictionary<TKey, TValue>IList<T>是扩展ICollection<T>的更专业的接口。 IDictionary<TKey, TValue>实现是键/值对的集合,如Dictionary<TKey, TValue>类。 IList<T>实现是值的集合,其成员可以通过索引访问,如List<T>类。

如果IDictionary<TKey, TValue>接口和IList<T>接口都不满足所需集合的要求,则从ICollection<T>接口派生新集合类,以获得更大的灵活性。

答案 1 :(得分:0)

IList例如 - &gt;

public interface IList:ICollection,IEnumerable https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx

编辑: 实际上你可以在&#34;备注&#34;下找到答案。部分:

https://msdn.microsoft.com/en-us/library/92t2ye13(v=vs.110).aspx

答案 2 :(得分:0)

我不相信有这些类型的预制清单供您阅读。但是,您可以轻松使用Reflection来自行查找:

Type[] types = Assembly.GetAssembly(typeof(int))
                       .GetTypes()
                       .Where(t => t.GetInterfaces().Any(i => i.Name == "ICollection"))
                       .ToArray();

foreach (var type in types)
{
    Console.WriteLine(type.Name);
}

它包括ArrayListQueueDictionary以及所有其他传统集合类型等类型。

(注意:并非所有列出的类型都可以公开访问,其中许多类型也不建议用于通用目的。)