繁体   English   中英

C#:如何删除IEnumerable中的项目

[英]c#: how do I remove an Item inside IEnumerable

我正在制作一个接受IEnumerable作为Itemsource的自定义网格。 但是,在删除方法期间,我无法删除itemsource中的一个Item。 你们可以使用下面的代码来帮助我吗?

static void Main(string[] args)
{
    List<MyData> source = new List<MyData>();
    int itemsCount = 20;
    for (int i = 0; i < itemsCount; i++)
    {
       source.Add(new MyData() { Data = "mydata" + i });
    }

    IEnumerable mItemsource = source;
    //Remove Sample of an mItemSource
    //goes here ..
}

public class MyData { public string Data { get; set; } }

你不能 IEnumerable (及其通用的IEnumerable<T> )仅用IEnumerable<T>目的-枚举某些集合的内容。 它不提供修改集合的功能。

如果您正在寻找一个提供所有典型方法来修改集合的接口(例如,添加,删除),那么如果需要按索引访问元素,请查看ICollection<T>IList<T>

或者,如果您的目标是为某些内容提供IEnumerable ,但删除了某些项目,请考虑使用Enumerable.Except()过滤掉它们( 如枚举 )。

使用while循环在删除时遍历列表。

int i = 0;
while(i < source.Count){
    if(canBeRemoved(source[i])){
        source.RemoveAt(i);
    }else{
        i++;    
    }
}

我能够使用动态从Itemsource中删除Item

    static void Main(string[] args)
    {

        List<MyData> source = new List<MyData>();
        int itemsCount = 20;
        for (int i = 0; i < itemsCount; i++)
        {
            source.Add(new MyData() { Data = "mydata" + i });
        }

        IEnumerable mItemsource = source;

        //Remove Sample of an mItemSource

        dynamic d = mItemsource;
        d.RemoveAt(0);

        //check data
        string s = source[0].Data;
    }
    public class MyData { public string Data { get; set; } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM