【问题标题】:I tried to delete lines more than x characters but i'm getting error我试图删除超过 x 个字符的行,但出现错误
【发布时间】:2020-12-23 07:27:59
【问题描述】:

我尝试删除超过 35 个字符的行,但出现此错误:

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“string[]”。存在显式转换(您是否缺少演员表?)

我不知道如何解决它。谁能帮帮我?

我的代码:

            var lines = File.ReadAllLines("my path");
            lines = lines.Where(x => x.Length <= 35); // error is here
            File.Delete("my path");
            File.AppendAllLines("my path", lines);

【问题讨论】:

  • 将鼠标悬停在代码中的 Where 上并检查返回类型。请注意,它与 lines 的类型不同。
  • 这能回答你的问题吗? Best way to convert IList or IEnumerable to Array
  • 在发送您的问题之前搜索当前问题,不要搜索并讲述您的故事。

标签: c#


【解决方案1】:

当您使用 .ReadAllLines() 读取文件时,您将获得一个字符串数组 (string[]) 的实例。当您使用.Where() 方法时,您会得到一个IEnumerable&lt;string&gt; ...,它不能分配给字符串数组。

简单的解决方案是使用.ToArray() 将结果转换为字符串数组,以便您可以将其分配回lines 变量。

lines = lines.Where(x => x.Length <= 35).ToArray();

【讨论】:

    【解决方案2】:

    Jawad 的解释恰到好处。请注意,还有另一种解决方案:

    string[] lines = File.ReadAllLines("my path");
    IEnumerable<string> lines2 = lines.Where(x => x.Length <= 35); // error is here
    File.Delete("my path");
    File.AppendAllLines("my path", lines2);
    

    (我使用string[]IEnumerable&lt;string&gt; 来明确方法返回的类型)。 File.AppendAllLines 接受IEnumerable&lt;string&gt; 作为参数,因此您可以将Where 的结果传递给它,而无需先将其转换为数组。请注意,我必须引入一个新的 lines2 变量。

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      相关资源
      最近更新 更多