【问题标题】:What types inherit from ICollection? [closed]哪些类型从 ICollection 继承? [关闭]
【发布时间】:2017-05-11 20:54:04
【问题描述】:

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

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

【问题讨论】:

  • 我不知道我应该将它们具体推入哪种类型从 ICollection 继承哪些类型是完全不同的问题?不过可以回答这个级别的细节。
  • 使用 List 如我的回答中所述
  • 哦,我以为列表只继承自 IEnumerable。谢谢!

标签: c# entity-framework icollection


【解决方案1】:

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

代码应该是这样的

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

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

以下是 ICollection 备注供您参考:

ICollection&lt;T&gt; 接口是System.Collections.Generic 命名空间中类的基接口。

ICollection&lt;T&gt; 接口扩展了IEnumerable&lt;T&gt;

IDictionary&lt;TKey, TValue&gt;IList&lt;T&gt; 是扩展ICollection&lt;T&gt; 的更专业的接口。 IDictionary&lt;TKey, TValue&gt; 实现是键/值对的集合,例如 Dictionary&lt;TKey, TValue&gt; 类。 IList&lt;T&gt; 实现是一个值的集合,它的成员可以通过索引访问,就像 List&lt;T&gt; 类一样。

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

【讨论】:

    【解决方案2】:

    我认为没有这些类型的预制列表供您阅读。但是,您可以轻松地使用 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 等类型以及所有其他传统集合类型。

    (注意:并非所有列出的类型都可以公开访问,也不建议将它们中的许多用于一般用途。)

    【讨论】:

      【解决方案3】:

      例如 IList ->

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

      编辑: 其实你可以在这里的“备注”部分找到答案:

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

      【讨论】:

        猜你喜欢
        • 2021-04-04
        • 2014-03-13
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多