C# : Removing an item from a List<T> without knowing its index?

标签 c# list

我正在使用 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/

相关文章:

c# - 为什么 Xunit CollectionDefinition 不能与 .NET 6 Web 应用程序中的类库一起使用?

c# - 创建一个简单的异步工作流事件

list - Grails在GSP( View )中更新列表,然后单击按钮提交

python - 更快地将列表居中的方法

c# - 存储用户的时区首选项

c# - 字符串中的递增字符

c# - 为什么 asp.net core 发送空对象作为响应?

list - (wx)最大: does `makelist` work in parallel or serially?

list - Prolog 可能删除列表中的元素

c++ - for 中的迭代器无限循环列表