已经有一段时间了,因为我已经使用了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>并且只有在从中获取元素时才开始迭代源数组.
如果你想要一个List(为了安全),请使用
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做什么.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。