在C#中搜索和删除Observable Collections中的东西?

use*_*233 3 c# foreach

我在这里遇到麻烦.我有一个可观察的集合,如果它符合某个标准,我想删除其中的一些东西.

这是代码:

foreach (Record record in SwearJarController.Records)
        {
            if (record.Word == "Hi")
            {


                SwearJarController.Records.Remove(record);
                Datastore.DB.Records.DeleteOnSubmit(record);


            }
        }
Run Code Online (Sandbox Code Playgroud)

记录是集合的名称,记录是类.显然,它在'foreach'部分感到困惑.

我该怎么办?

谢谢!

m-y*_*m-y 7

您无法修改要枚举的集合.你必须做一个ToArray()ToList()在你的foreach:

foreach (Record record in SwearJarController.Records.ToArray())
{
    if (record.Word == "Hi")
    {
            SwearJarController.Records.Remove(record);
            Datastore.DB.Records.DeleteOnSubmit(record);
    }
}
Run Code Online (Sandbox Code Playgroud)

清理版本:

foreach (Record record in SwearJarController.Records
                          .Where(x => String.Equals(x.Word, "Hi")
                          .ToArray())
{
    SwearJarController.Records.Remove(record);
    Datastore.DB.Records.DeleteOnSubmit(record);
}
Run Code Online (Sandbox Code Playgroud)

注意:您应该真正使用String.Equals(...)和使用StringComparison枚举.我不确定您的比较是否是区分大小写和/或序数/当前文化/不变量文化.