我有一个List< FileInfo> fileList和我正在尝试创建一个包含文件名的变量,如下面的代码:
var newFileName = fileList.Select(x => x.Name).ToString();
现在我希望newFileName的值是文件名,但我得到的值是:
System.Linq.Enumerable+WhereSelectListIterator`2[System.IO.FileInfo,System.String]
我需要将文件名作为字符串获取,因为我想检查另一个List<字符串> filesTemp已经包含newFileName。
if (!filesTemp.Contains(newFileName))
为什么我提到的值和如何获得文件的实际名称?
感谢您的帮助
答案 0 :(得分:1)
Select
返回一个延迟评估的集合,您需要使用FirstOrDefault
从集合中获取第一个值。
var newFileName = fileList.Select( x => x.Name ).FirstOrDefault();
但是这仅适用于单个文件名,您可以使用if语句中的Any
方法来检查fileList
中是否存在filesTemp
中的任何名称}。
var isInTemp = fileList.Any( x => filesTemp.Contains( x.Name ) );
答案 1 :(得分:1)
我们将从属性FileInfo.Name
由于您尚未确定select中的任何文件,您可以按以下方式获取文件名。
fileList[0].Name
如果要根据名称选择文件,
fileList.Select(x => x.Name == name).ToList(); // Select file according to specific name.
答案 2 :(得分:0)
替换
var newFileName = fileList.Select(x => x.Name).ToString();
通过
IList<string> newFileName = fileList.Select(x => x.Name).ToList();
它将返回文件名列表,然后进行比较
答案 3 :(得分:-1)
好像你的问题是关于聚合。
我认为以下链接应该是您正在寻找的内容: Concat all strings inside a List<string> using LINQ