0

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

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; } }
4

3 回答 3

7

你不能。 IEnumerable(和它的通用对应物IEnumerable<T>)就是为了这个——枚举一些集合的内容。它不提供修改集合的工具。

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

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

于 2012-08-08T02:30:15.317 回答
-2

我能够使用动态从 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; } }
于 2012-08-08T06:22:52.573 回答
-2

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

int i = 0;
while(i < source.Count){
    if(canBeRemoved(source[i])){
        source.RemoveAt(i);
    }else{
        i++;    
    }
}
于 2012-08-08T02:39:49.990 回答