【问题标题】:C# - Only read first char with WhileloopC# - 仅使用 While 循环读取第一个字符
【发布时间】:2013-06-05 22:49:29
【问题描述】:

我已经搜索了大约一个小时,但根本找不到任何解决方案。我希望将 .txt 文件中的每一行添加到我的列表中,只要它以相同的数字开头。问题在于“line.Substring(0, 1)”,我不知道如何解决。或许你明白我想要达到的目的。

        using (StreamReader file = new StreamReader(schedulePathDays))
        {
            string line;
            while ((line.Substring(0, 1) = file.ReadLine()) == thisDay.ToString())
            {
                exercisesRow.Add(line);
            }
        }

【问题讨论】:

  • 为什么不string.StartsWith()
  • 行似乎为空...
  • (line.Substring(0, 1) = file.ReadLine()) 是错误的。你的意思是(file.ReadLine().Substring(0, 1))
  • @TimSchmelter 他在给线路分配任何东西之前就打电话给line.SubString

标签: c# list text while-loop streamreader


【解决方案1】:

您可以使用ReadLines,然后使用LINQ进行过滤:

var result = File.ReadLines("yourPath")
                 .Where(line => line.StartsWith("1"));

ReadLines延迟执行,因此它可以在大文本文件中工作。

编辑:要映射到您的代码,请将您的代码替换为以下代码:

exercisesRow = File.ReadLines(schedulePathDays)
                   .Where(line => line.StartsWith(thisDay.ToString()))
                   .ToList();

【讨论】:

  • 我对 C# 非常陌生,因此我不知道如何使用您刚刚发布的代码。您能否发布包含您的代码的我的代码的外观?谢谢!
  • @ArvinAshrafi:编辑了我的答案
  • @ArvinAshrafi 请记住,您不应该盲目地复制粘贴其他人的代码。首先尝试理解代码。例如:File 实际上应该是 file(小写),StartWith 应该是 StartsWith(中间有 's')。
  • @Nolonar:感谢您指出StartsWith :),但File 不应更改为file,因为ReadLines 是静态方法
【解决方案2】:

您的语法没有意义。你可能想要这样的东西:

file.ReadLine().Substring(0,1)==thisDay.ToSTring()

我认为这就是你想要写的,尽管 Cuong Le 的答案可能要好得多(除了需要参数化)。

【讨论】:

    【解决方案3】:

    您的Substring(0,1) 放错地方了。它应该在分配line 之后。

    //Altnerately: (...).Substring(0,1) instead of (...)[0]
    while((line = file.ReadLine())[0] == thisDay.ToString()[0]){
        //code
    }
    

    要求尝试分配Substring方法的结果是没有意义的。

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2023-04-07
      • 1970-01-01
      • 2017-02-02
      • 2014-09-25
      • 2020-05-17
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      相关资源
      最近更新 更多