c#:如何删除IEnumerable中的Item

时间:2012-08-08 02:28:59

标签: c#

我正在创建一个自定义网格,接受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; } }

3 个答案:

答案 0 :(得分:7)

你做不到。 IEnumerable(及其通用对应IEnumerable<T>)就是这样 - 枚举某些集合的内容。它没有提供修改集合的工具。

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

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

答案 1 :(得分:-2)

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

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

答案 2 :(得分:-2)

我能够使用动态

从Itemssource中删除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; } }