2
以外的元素下面我有一个方法,应该删除除最新的文件的所有版本。我的Except
调用不会产生我期待的结果,再次查看文档后,我似乎无法理解为什么。为了调试的目的,我将LINQ查询的Except
移出了我的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);
}
}
这个工程,是一个更好的解决办法,因为我会接受它。但是,偶然你能解释为什么我的“Except”不工作? – evanmcdonnal
@evanmcdonnal很难说 - 你发布的代码实际上并没有按原样编译,所以我不能看到它到底有什么问题;) –
@evanmcdonnal我试过了,用'localFiles'替换'files'没有编译),并且它工作正常。如果我有3个名为'abc'的文件后跟时间戳,toDelete包含2个最早的文件。 –