C# - 使用 lambda 表达式或 LINQ 填充列表

标签 c# linq lambda

自从我使用 lambda 表达式或 LINQ 以来已经有一段时间了,我想知道我将如何使用这两种方法执行以下操作(我知道我可以使用 foreach 循环,这只是出于好奇)。

我有一个字符串路径数组(这里是数组还是列表会有区别吗?)我想从中返回一个仅包含文件名的新列表。

即使用 foreach 循环将是:

string[] paths = getPaths();
List<string> listToReturn = new List<string>();
foreach (string path in paths)
{
    listToReturn.add(Path.GetFileName(path));
}

return listToReturn;

我如何对 lambda 和 LINQ 做同样的事情?

编辑:在我的例子中,我使用返回的列表作为 ListBox (WPF) 的 ItemsSource,所以我假设它需要是一个列表而不是 IEnumerable ?

最佳答案

您的主要工具是 .Select() 方法。

string[] paths = getPaths();
var fileNames = paths.Select(p => Path.GetFileName(p));

does it make a difference if it's an array or list here?

不,数组还实现了IEnumerable<T>


请注意,这种最小的方法涉及延迟执行,这意味着 fileNames是一个 IEnumerable<string>并且仅在从中获取元素时才开始遍历源数组。

如果你想要一个列表(安全起见),使用

string[] paths = getPaths();
var fileNames = paths.Select(p => Path.GetFileName(p)).ToList();

但是当有很多文件时,您可能希望通过使用延迟执行 来相反的方向(交错获得结果,更快)来源:

var filePaths = Directory.EnumerateFiles(...);  // requires Fx4
var fileNames = filePaths.Select(p => Path.GetFileName(p));

这取决于您接下来要用 fileNames 做什么.

关于C# - 使用 lambda 表达式或 LINQ 填充列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5418839/

相关文章:

lambda - D:不需要的匿名函数属性

c# - 如何在 selenium C# 中获取 reCaptcha 图像

c# - WPF 中的 View 和 View 模型

c# - LINQ 组按星期几抛出异常

c# - 如何在字典集合中使用 LINQ 将 TimeSpans 添加到一起

c# - Lambda 表达式创建不相关的编译错误

c# - C#3.0-如何从星期一开始按星期名称订购列表?

c# - IIS 7 - 确定小数点符号

c# - Linq 查询返回记录列表而不是显示单个记录

c# - 在 Linq 中选择 Class(variable) 而不是 Select New Class{variable = x}