筛选器链接的语法较短

Bal*_*tar 1 c# linq

var fileIO = new FileIO();
var datafiles = _fileIo.GetFileDetails(directory)
   .Where(f => !f.FileName.EndsWith(".csv"))
   .Where(f => !f.FileName.EndsWith(".xls"))
   .Where(f => !f.FileName.EndsWith(".xlsx"));
Run Code Online (Sandbox Code Playgroud)

似乎应该有一种更简洁的语法,该语法允许传递后缀字符串列表。

Joh*_*ica 11

那这个呢?:

var fileExtensions = new HashSet<string>() { ".csv", ".xls", ".xlsx" };
var datafiles = _fileIo.GetFileDetails(directory)
                    .Where(f => 
fileExtensions.Contains(Path.GetExtension(f)));
Run Code Online (Sandbox Code Playgroud)

我们使用Path.GetExtension“ test.csv”获取“ .csv”,然后将其与一组字符串进行比较。

目前,此比较区分大小写:.csv会匹配,但.cSv不会匹配。您可以添加a StringComparer来不敏感地处理这种情况:

var fileExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { ".csv", ".xls", ".xlsx" };
Run Code Online (Sandbox Code Playgroud)

  • 使用`HashSet`,您可以添加`HashSet &lt;string&gt;(StringComparer.OrdinalIgnoreCase)`,以便它也可以处理“ .CsV”和所有其他变体。 (2认同)