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個最早的文件。 –