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