2013-08-23 128 views
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); 
    } 
} 

回答

0

在这种情况下,你可以使用跳过,直接跳过第一个文件,并避免Except电话:

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

这个工程,是一个更好的解决办法,因为我会接受它。但是,偶然你能解释为什么我的“Except”不工作? – evanmcdonnal

+0

@evanmcdonnal很难说 - 你发布的代码实际上并没有按原样编译,所以我不能看到它到底有什么问题;) –

+1

@evanmcdonnal我试过了,用'localFiles'替换'files'没有编译),并且它工作正常。如果我有3个名为'abc'的文件后跟时间戳,toDelete包含2个最早的文件。 –