我正在使用 FileSystemWatcher 类来监视文件夹并在事件出现时更新列表。我正在使用以下类来保存每个文件的信息:
public class FileItem
{
public string Name { get; set; }
public string Path { get; set; }
}
以下列表包含该信息的集合:
public static List<FileItem> folder = new List<FileItem>();
我在列表中添加了一些 FileItem 对象。但是,要删除具有匹配名称的特定项目,我不能只使用 foreach() 循环,因为枚举会发生变化,一旦文件被删除,我就会得到一个异常。因此,我添加了一个中断(因为只有一个同名文件)以在删除一个项目后跳出 foreach() 循环……但我不确定这是否是最有效的方法它。有没有更简单更合适的方法呢?这是我的删除代码:
private static void OnChanged(object source, FileSystemArgs e)
{
if (e.ChangeType == WatcherChangeTypes.Deleted)
{
foreach (var item in folder)
{
if (item.Name == e.Name)
{
folder.Remove(item);
folder.TrimExcess();
break;
}
}
}
}
最佳答案
您可以通过 linq 填充它然后从列表中删除它来删除任何项目
List<FileItem> folder = new List<FileItem>();
folder.Remove(folder.SingleOrDefault(x=>x.Name == "myname"));
folder.Remove(folder.SingleOrDefault(x => x.Path == "mypath"));
关于C# : Removing an item from a List<T> without knowing its index?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690438/