c# - 使用 Except 删除元素

标签 c# .net linq

下面我有一个方法应该删除除最新版本之外的文件的所有版本。我的 Except 调用没有产生我期望的结果,在再次查看文档后我似乎无法理解为什么。出于调试目的,我已将带有 Except 的 LINQ 查询移出我的 foreach 条件。当我调试newest正确设置为最近的日志文件时,下一行执行toDelete后仍然包含newest,为什么?我在这里错过了什么?所有相关代码如下。该方法被调用,将文件设置为日志名称的静态部分,之后它有一个时间戳。 Where(x => x.Contains(file)) 都完全按照我的预期工作。

public static void CleanUpLocalCopies(string file)
{
    string[] localFiles = Directory.GetFiles(".\\");

    string newest = files.Where(x => x.Contains(file)).OrderByDescending(x => x).FirstOrDefault();
    var toDelete = localFiles.Where(x => x.Contains(file)).Except(new string[] { newest });

    foreach (string f in toDelete)
    {
        File.Delete(f);
    }
}

最佳答案

在这种情况下,您可以使用 skip 直接跳过第一个文件,避免 Except 调用:

var toDelete = files.Where(x => x.Contains(file)).OrderByDescending(x => x).Skip(1);

关于c# - 使用 Except 删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407713/

相关文章:

c# - 获取共享点列表的列表项的 guid

.Net: ""(空格字符)的更好等效?

c# - 从 Cosmos 中删除数据时出现分区键错误

c# - 列表中小于 X 的最大值

c# - 何时在数据类中使用 char 字段

c# - 视频文件未在 C# 中使用 FFMpeg 进行修剪和复制

c# - authCookie 在 global.asax 中不安全

c# - 在鼠标悬停事件上突出显示列表框项目

c# - 如何通过来自多个程序集的接口(interface)有效地对所有实现进行分组?

c# - 未实现 WCF 接口(interface)