C# 编写LINQ语句,为每个列表元素添加值

C# 编写LINQ语句,为每个列表元素添加值,c#,linq,foreach,integer,C#,Linq,Foreach,Integer,首先,我有一个helper方法,它将返回列表中具有给定扩展名的文件数。我想得到给定列表中的音频文件总数,并且我有一个使用的音频扩展的列表 public List<string> accepted_extensions = {"mp3", "wav", "m4a", "wma", "flac"}; 所以,我想看看是否有可能用LINQ编写一个ForEach,将每个方法的结果加上一个列表和一个整数的给定扩展名。我对LINQ不是很在行,所以我从: int audio_file_count

首先,我有一个helper方法,它将返回列表中具有给定扩展名的文件数。我想得到给定列表中的音频文件总数,并且我有一个使用的音频扩展的列表

public List<string> accepted_extensions = {"mp3", "wav", "m4a", "wma", "flac"};
所以,我想看看是否有可能用LINQ编写一个ForEach,将每个方法的结果加上一个列表和一个整数的给定扩展名。我对LINQ不是很在行,所以我从:

int audio_file_count = accepted_extensions.ForEach(i => getFileTypeCount(new_file_list.ToArray(),i));
但我不知道如何将helper方法返回的数字添加到总数中。我知道使用常规的foreach循环很容易做到这一点,我只是想看看使用LINQ是否可行。

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

private int GetFileTypeCount(string[] files, string ext)
{
    return files.Count(file => Path.GetExtension(file).Contains(ext));
}
您可以使用extension方法对resultset执行聚合:

private int GetFileTypeCount(string[] files, string ext)
{
    return files.Count(file => Path.GetExtension(file).Contains(ext));
}

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

int audio_file_count = accepted_extensions.
    Sum(extension => getFileTypeCount(new_file_list.ToArray(), extension));

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

int audio_file_count = accepted_extensions.
    Sum(extension => getFileTypeCount(new_file_list.ToArray(), extension));
你可以试试这个:

Int32 count = files.Count(file => Path.GetExtension(file).Contains(ext));
你可以试试这个:

Int32 count = files.Count(file => Path.GetExtension(file).Contains(ext));
static void Main(字符串[]args)
{
列表接受的_扩展=新列表{.mp3“,.wav“,.m4a“,.wma“,.flac”};
字符串[]文件=新字符串[]{};
int count=files.count(file=>accepted_extensions.Contains(Path.GetExtension(file));
}
静态void Main(字符串[]args)
{
列表接受的_扩展=新列表{.mp3“,.wav“,.m4a“,.wma“,.flac”};
字符串[]文件=新字符串[]{};
int count=files.count(file=>accepted_extensions.Contains(Path.GetExtension(file));
}

Path.GetExtension return.wav或.mp3,因此请将列表编辑为“{.mp3”、“.wav”、“.m4a”、“.wma”、“.flac”};Path.GetExtension return.wav或.mp3 so do编辑列表到{.mp3“,.wav“,.m4a“,.wma“,.flac”};与OP一样,这也将计算
a.mp31
b.seave
。当然,
。Contains
方法就是这样工作的。如果要计算精确匹配,需要做的就是调整查询,更具体地说,调整约束,以便可以将精确匹配与扩展进行比较。与OP一样,这也将计算
a.mp31
b.seave
。当然,
包含
方法就是这样工作的。如果您想计算精确匹配,那么需要做的就是调整查询,更具体地说是调整约束,以便您可以将精确匹配与扩展进行比较。