【问题标题】:Returning a files name as string将文件名作为字符串返回
【发布时间】:2014-12-26 09:01:53
【问题描述】:

我有一个 List 文件列表,我正在尝试创建一个包含文件名的变量,如下面的代码:

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))

为什么是我提到的值,我怎样才能得到文件的实际名称?

感谢您的帮助

【问题讨论】:

  • 请显示文件列表声明
  • Type 中有哪些项目在 fileList 中?字符串?文件信息的?
  • 抱歉我已经编辑了
  • @Simon:Type 中有哪些项目在filesTemp 中? Strings? FileInfo的?

标签: c# string linq contains fileinfo


【解决方案1】:

Select 返回一个惰性求值的集合,您需要使用FirstOrDefault 从集合中获取第一个值。

var newFileName = fileList.Select( x => x.Name ).FirstOrDefault();

但这仅适用于单个文件名,您可以在 if 语句中使用Any 方法来检查fileList 中的任何名称是否存在于filesTemp 中。

var isInTemp = fileList.Any( x => filesTemp.Contains( x.Name ) );

【讨论】:

    【解决方案2】:

    我们将从属性FileInfo.Name获取文件名

    由于你还没有确定选择中的任何文件,你可以通过以下方式获取文件名。

    fileList[0].Name
    

    如果要根据名称选择文件,

    fileList.Select(x => x.Name == name).ToList(); // Select file according to specific name.
    

    【讨论】:

      【解决方案3】:

      替换

      var newFileName = fileList.Select(x => x.Name).ToString();
      

      通过

      IList<string> newFileName = fileList.Select(x => x.Name).ToList();
      

      它将返回一个文件名列表,然后进行比较

      【讨论】:

        【解决方案4】:

        您的问题似乎与聚合有关。

        我认为下面的链接应该是您正在寻找的内容: Concat all strings inside a List<string> using LINQ

        【讨论】:

          猜你喜欢
          • 2016-07-25
          • 2019-12-19
          • 1970-01-01
          • 1970-01-01
          • 2020-06-14
          • 2011-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多