C#:在不知道索引的情况下从List <T>中删除项目?

B.K*_*.K. 2 c# list

我正在使用FileSystemWatcher类来监视文件夹并在事件发生时更新列表.我正在使用以下类来保存每个文件的信息:

public class FileItem
{
    public string Name { get; set; }
    public string Path { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以下列表包含该信息的集合:

public static List<FileItem> folder = new List<FileItem>();
Run Code Online (Sandbox Code Playgroud)

我在列表中添加了一些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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 6

你可以通过linq填充它,然后从列表中删除它来删除任何项目

List<FileItem> folder = new List<FileItem>();
folder.Remove(folder.SingleOrDefault(x=>x.Name == "myname"));
folder.Remove(folder.SingleOrDefault(x => x.Path == "mypath"));
Run Code Online (Sandbox Code Playgroud)