标签: icollection

为什么在许多/一对多的关系中使用ICollection而不是IEnumerable或List <T>?

我在教程中看到了很多,导航属性为ICollection<T>.

这是实体框架的强制性要求吗?我可以用IEnumerable吗?

使用ICollection代替IEnumerable甚至是什么的主要目的是List<T>什么?

c# entity-framework icollection code-first

342
推荐指数
6
解决办法
16万
查看次数

实体框架中的ICollection <T> Vs List <T>

在我首先设计一些Entity Framework应用程序之前,我只看了几个网络广播.我真的没有阅读那么多文档,我觉得我现在正在为此而痛苦.

我一直List<T>在我的课堂上使用,而且效果很好.

现在我已经阅读了一些文档,并说它应该一直在使用ICollection<T>.我改为这个,它甚至没有导致模型上下文改变.这是因为兼并List<T>ICollection<T>继承IEnumerable<T>,这是EF实际需要的吗?

但是,如果是这种情况,为什么EF文档没有声明它需要IEnumerable<T>而不是ICollection<T>

在任何情况下,我做了什么都有任何缺点,或者我应该改变它?

c# ienumerable list icollection ef-code-first

98
推荐指数
4
解决办法
6万
查看次数

ICollection - 获取单个值

从ICollection获取值的最佳方法是什么?我们知道Collection除此之外是空的.

.net c# icollection

48
推荐指数
4
解决办法
8万
查看次数

IEnumerable和IEnumerable <T>之间的区别?

IEnumerable和之间有什么区别IEnumerable<T>

我已经看到很多框架类实现了这两个接口,因此我想知道通过实现它们可以获得哪些优势?

请看看他们是如何定义的:

public interface IEnumerable
{
    [DispId(-4)]
    IEnumerator GetEnumerator();
}
public interface IEnumerable<T> : IEnumerable
{
    IEnumerator<T> GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,IEnumerable<T>源于IEnumerable,这意味着无论IEnumerable有什么,IEnumerable<T>继承,那么为什么我们实现两者而不仅仅是IEnumerable<T>?实施IEnumerable<T>还不够吗?

同样,还有其他类似的对:

  • IListIList<T>
  • ICollectionICollection<T>

我也想知道这些.

c# generics ienumerable ilist icollection

48
推荐指数
2
解决办法
1万
查看次数

使用列表作为DataGridView的数据源

我已经从配置文件中将设置名称及其各自的值提取到有序字典中.字典包含ICollection类的键和值.我想绑定该数据并将其显示在DataGridView中.我已经尝试将字符串复制到数组并显示这些数组,但是当我运行程序时,列是空白的,它似乎根本没有绑定.

我还尝试将DataGridView源直接设置为有序字典集合(键或值),但这也没有产生我想要的任何东西; 列仍然是空白的.但是,第三列的列名称为"length",并显示ICollection中条目的长度.但不用说我不想要长度,我想要条目本身.

这是我用于此问题的代码:在加载表单时,我加载配置文件,名为m_Settings的私有成员具有所有键值对.然后我创建一个列表并分别添加键和值.将绑定源设置为'data'后,我运行程序,我添加的两个列都是空白的.

    private void Form4_Load(object sender, EventArgs e)
    {
        loadconfigfile(Properties.Settings.Default.Config);
        List<Object> data = new List<Object>();
        data.Add(m_Settings.Keys);
        data.Add(m_Settings.Values);
        bindingSource1.DataSource = data;
        dataGridView1.DataSource = bindingSource1;
        dataGridView1.Refresh();
    }
Run Code Online (Sandbox Code Playgroud)

关于如何获得有序字典并在标有"设置"和"值"的两列中显示条目的任何想法?我相信列表是兼容DataGridViews的DataSources,但现在我开始猜测自己了.

任何帮助或方向非常感谢!如果需要,我很乐意提供更多信息.

谢谢!

编辑:

以下是已实现的myStruct类的修订代码:

    List<myStruct> list = new List<myStruct>();
    for(int index = 0; index < m_Settings.Count; index++)
    {
        myStruct pair = new myStruct(keys[index], values[index].ToString());
        list.Add(pair);
    }

    public class myStruct
    {
        private string Key { get; set; }
        private string Value { get; set; }

        public myStruct(string key, string value)
        {
            Key …
Run Code Online (Sandbox Code Playgroud)

c# datasource datagridview ordereddictionary icollection

30
推荐指数
2
解决办法
17万
查看次数

ICollection <T>是否有订单?

遵循公共API永远不会返回列表的规则,我正在盲目转换返回列表的所有代码,ICollection<T>而是返回:

public IList<T> CommaSeparate(String value) {...}
Run Code Online (Sandbox Code Playgroud)

public ICollection<T> CommaSeparate(String value) {...}
Run Code Online (Sandbox Code Playgroud)

虽然a ICollection有a Count,但是没有办法通过该索引获取项目.

虽然ICollection公开了一个枚举器(允许foreach),但我不能保证枚举的顺序从列表的"顶部"开始,而不是"底部".

我可以通过避免使用来减轻这种情况ICollection,而是使用Collection:

public Collection<T> Commaseparate(String value) {...}
Run Code Online (Sandbox Code Playgroud)

这允许使用Items[index]语法.

不幸的是,我的内部实现构造了一个数组; 我可以被转换为返回IListICollection,但不作为Collection.

有没有办法按顺序访问集合的项目?

这引出了一个更广泛的问题:是否一个ICollection的,即使订单?


从概念上讲,想象一下我想解析一个命令行字符串.保持物品的顺序至关重要.

从概念上讲,我需要一个表示"有序"字符串元组集的契约.在API合同的情况下,为了表明订单,以下哪项是正确的:

IEnumerable<String> Grob(string s)

ICollection<String> Grob(string s)

IList<String> Grob(string s)

Collection<String> Grob(string s)

List<String> Grob(string s)
Run Code Online (Sandbox Code Playgroud)

c# collections icollection

27
推荐指数
3
解决办法
9931
查看次数

使用IEnumerable和ICollection与IList的自定义集合

我需要设计自己的自定义GenericCollection类.现在我有很多选择使用以获得它IEnumerable,ICollectionIList,在后来提供了一些附加功能.

我很困惑,如果我和我一起去,IEnumerable<T>我可能需要声明对象实际上像这种情况一样持有集合_list.

public class GenericCollection<T> : IEnumerable<T>
{
    private List<T> _list;
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是如果我使用ICollection<T>或者IList<T>,我不需要声明List对象,因为它是隐式可用的.

public class GenericCollection<T> : IList<T>
{
    // no need for List object
    //private List<T> _list; 
    //...
}
Run Code Online (Sandbox Code Playgroud)

这两种方法在性能方面有何不同?

在哪种情况下,每个人都是首选,特别是在设计自己的集合时.我对轻量级收藏感兴趣,性能良好.我认为这可以通过使用,IEnumerable<T>但是如何与一些强有力的理由一起使用呢?

我已经审查了一些现有的帖子,但没有提供所需的信息.

返回'IList'与'ICollection'对比'收集'

c# ienumerable ilist icollection custom-collection

21
推荐指数
1
解决办法
2万
查看次数

为什么ICollection索引在实例化时不起作用?

当我们将参数声明为ICollection并将对象实例化为List时,为什么我们无法检索索引?即

ICollection<ProductDTO> Products = new List<ProductDTO>();
Products.Add(new ProductDTO(1,"Pen"));
Products.Add(new ProductDTO(2,"Notebook"));
Run Code Online (Sandbox Code Playgroud)

然后,这将无效:

ProductDTO product = (ProductDTO)Products[0];
Run Code Online (Sandbox Code Playgroud)

我错过了什么?
[是的,我们可以使用List作为声明,它可以工作,但我不想声明为列表,如:

List<ProductDTO> Products = new List<ProductDTO>();
Run Code Online (Sandbox Code Playgroud)

]

c# indexing list icollection

20
推荐指数
4
解决办法
3万
查看次数

返回ICollection <T>而不是List <T>的真正好处是什么?

我读过一些博客文章提到,对于公共API,我们应该总是返回ICollection(或IEnumerable)而不是List.返回ICollection而不是List的真正优势是什么?

谢谢!

重复:List(T)和Collection(T)有什么区别?

.net c# ienumerable icollection

15
推荐指数
1
解决办法
1万
查看次数

添加到ICollection

我目前正在编写一个C#项目,我需要对项目进行单元测试.对于我需要进行单元测试的方法之一,我使用ICollection,该ICollection通常从列表框的选定项中填充.

当我为方法创建单元测试时,它会创建该行

ICollection icollection = null; //Initialise to an appropriate value
Run Code Online (Sandbox Code Playgroud)

如何创建此ICollection的实例和集合中的项?

c# icollection

15
推荐指数
2
解决办法
6万
查看次数