C# 使用lambda,如何将现有函数应用于列表的所有元素?

C# 使用lambda,如何将现有函数应用于列表的所有元素?,c#,lambda,C#,Lambda,对不起,一个简短的问题: 我有一个字符串列表,字符串是一些文件的完整路径。我只想得到没有路径的文件名,也不想得到每个字符串的扩展名,并且更了解lambda 基于中的lambda表达式,我正在尝试以下内容: FilesName = Directory.GetFiles(fbd.SelectedPath).ToList(); // full path List<string> FilesNameWithoutPath = AllVideosFileNames.ForEach(x =>

对不起,一个简短的问题:

我有一个字符串列表,字符串是一些文件的完整路径。我只想得到没有路径的文件名,也不想得到每个字符串的扩展名,并且更了解lambda

基于中的lambda表达式,我正在尝试以下内容:

FilesName = Directory.GetFiles(fbd.SelectedPath).ToList(); // full path
List<string> FilesNameWithoutPath = AllVideosFileNames.ForEach(x => Path.GetFileNameWithoutExtension(x)); // I want only the filename
AllVideosGrid.DataSource = FilesNameWithoutPath.ConvertAll(x => new { Value = x }); // to then bind it with the grid
错误是:

无法将void转换为字符串列表

因此,我想为filename中的每个字符串应用Path.GetFileNameWithoutExtension。如果您能对Lamba在这种情况下的工作方式进行更多描述,我将不胜感激

ForEach将对列表中的每个项目执行一些代码,但不会返回任何内容请参见:。您要做的是选择方法see:的结果,该结果类似于:

List<string> FilesNameWithoutPath = AllVideosFileNames
    .Select(x => Path.GetFileNameWithoutExtension(x))
    .ToList(); 
ForEach将对列表中的每个项目执行一些代码,但不会返回任何内容请参见:。您要做的是选择方法see:的结果,该结果类似于:

List<string> FilesNameWithoutPath = AllVideosFileNames
    .Select(x => Path.GetFileNameWithoutExtension(x))
    .ToList(); 
您使用的方法接受列表中的每个元素并将给定的函数应用于它们,但它不返回任何内容。因此,您所做的基本上就是获取每个文件名并将其丢弃

您需要的是Select而不是ForEach:

这将投影每个项目,对它们应用Path.GetFileNameWithoutExtension并返回结果,然后您将该结果放入ToList的列表中

请注意,您还可以使用方法组缩短Select,而无需声明lambda变量:

.Select(Path.GetFileNameWithoutExtension)
您使用的方法接受列表中的每个元素并将给定的函数应用于它们,但它不返回任何内容。因此,您所做的基本上就是获取每个文件名并将其丢弃

您需要的是Select而不是ForEach:

这将投影每个项目,对它们应用Path.GetFileNameWithoutExtension并返回结果,然后您将该结果放入ToList的列表中

请注意,您还可以使用方法组缩短Select,而无需声明lambda变量:

.Select(Path.GetFileNameWithoutExtension)
所有视频文件名。选择x=>Path.GetFileNameWithoutExtensionx.ToList;您需要提取一个列表,而不仅仅是执行一个foreach,它不会生成任何AllVideosFileName;您需要提取一个列表,而不仅仅是做一个foreach,它不会产生任何结果,除了我需要将列表绑定到网格的ConvertAll部分,而不是像OP中的链接问题那样使用IListstates@KyleKhalaf如果需要具有Value属性的匿名类型列表,则不需要ConvertAll。您可以执行以下操作:.Selectx=>new{Value=Path.GetFileNameWithoutExtensionx}.ToListConvertAll绑定到网格不是我关心的问题,您对OP关于如何使用lambda的回答是正确的。感谢您接受我需要ConvertAll部分将列表绑定到网格而不是IList作为OP中的链接问题states@KyleKhalaf如果需要具有Value属性的匿名类型列表,则不需要ConvertAll。您可以执行以下操作:.Selectx=>new{Value=Path.GetFileNameWithoutExtensionx}.ToListConvertAll绑定到网格不是我关心的问题,您对如何使用lambda的回答是正确的。谢谢