2010-09-02 63 views
0

我有以下幾點:自IEnumerable選擇文件<>

var selectedFilesToReplace = new List<string>(); 
foreach (string file in files) 
{ 
    selectedFilesToReplace.AddRange(listUploadedFiles 
     .Where(x => Path.GetFileNameWithoutExtension(x) == file)); 
} 

,填補了selectedFilesToReplace收集了一套完整路徑文件。 我只需要選擇帶擴展名的文件名。

這是可能的一個單一的Linq表達式?

回答

1
var fileNameOnly = selectedFilesToReplace.Select(Path.GetFileName); 
3

像這樣:

selectedFilesToReplace.AddRange(listUploadedFiles 
    .Where(x => Path.GetFileNameWithoutExtension(x) == file)) 
    .Select(p => Path.GetFileName(p)); 

在C#4,你也可以寫

selectedFilesToReplace.AddRange(listUploadedFiles 
    .Where(x => Path.GetFileNameWithoutExtension(x) == file)) 
    .Select(Path.GetFileName); 
+0

我還沒有切換C#4; 「返回類型推斷對方法組不起作用」的限制是否已被解除? http://blogs.msdn.com/b/ericlippert/archive/2007/11/05/c-3-0-return-type-in​​ference-does-not-work-on-member-groups.aspx – Ani 2010-09-02 09:32:30

+1

@Ani:是的。 – SLaks 2010-09-02 18:20:18

0

這裏是一個更短的實施作爲一個單一的表達:

var selectedFilesToReplace = 
    listUploadedFiles.Where(
     f => files.Contains(
     Path.FileNameWithoutExtension(f))) 
      .ToList(); 

雖然恕我直言.ToList()是親可能只是多餘的。

相關問題