1

首先,我有一个辅助方法,它将返回列表中具有给定扩展名的文件数。我想获取给定列表中总体音频文件的数量,并且我有一个使用的音频扩展名列表。

public List<string> accepted_extensions = {"mp3", "wav", "m4a", "wma", "flac"};

辅助方法:

private int getFileTypeCount(string[] files, string ext)
    {
        int count = 0;
        foreach (string file in files) if (Path.GetExtension(file).Contains(ext))
            {
                count++;
            }
        return count;
    }

所以,我想看看是否可以用 LINQ 编写一个 ForEach,它将每个方法的结果与一个列表和给定的扩展名添加到一个整数。我对LINQ不是很好,所以我开始:

int audio_file_count = accepted_extensions.ForEach(i => getFileTypeCount(new_file_list.ToArray(),i));

但我不确定如何将辅助方法返回的数字加到总数中。我知道这可以通过常规的 foreach 循环轻松完成,我只是想看看 LINQ 是否可行。

4

5 回答 5

3

您可以使用.Count()扩展方法对结果集执行聚合:

private int GetFileTypeCount(string[] files, string ext)
{
    return files.Count(file => Path.GetExtension(file).Contains(ext));
}
于 2013-01-13T17:26:57.860 回答
2

您可以使用该Sum方法。以这种方式修改您的查询:

int audio_file_count = accepted_extensions.
    Sum(extension => getFileTypeCount(new_file_list.ToArray(), extension));
于 2013-01-13T17:27:56.657 回答
0

你可以试试这个:

Int32 count = files.Count(file => Path.GetExtension(file).Contains(ext));
于 2013-01-13T17:29:22.393 回答
0
    static void Main(string[] args)
    {
        List<string> accepted_extensions = new List<string> {".mp3", ".wav", ".m4a", ".wma", ".flac"};

        string[] files = new string[] {};

        int count = files.Count(file => accepted_extensions.Contains(Path.GetExtension(file)));
    }
于 2013-01-13T17:31:15.137 回答
0
var count = files
         .Count(f => accepted_extensions.Any(x => Path.GetExtension(f).EndsWith(x)));
于 2013-01-13T17:33:08.783 回答