【问题标题】:Unreachable code FOR无法访问的代码 FOR
【发布时间】:2016-03-21 17:26:34
【问题描述】:

我有这段代码,我想改进它。我想删除 goto

string NameOfFile = tbOpenFile.Text;

FileStream ReadStream = new FileStream(NameOfFile, FileMode.Open, FileAccess.ReadWrite);

StreamReader r_Read = new StreamReader(ReadStream);
i = 1;
lb1.Items.Clear();

for (; ; i++)
{
    tbOpenFile.Text = r_Read.ReadLine();
    lines[i] = tbOpenFile.Text;

    lb1.Items.Add(lines[i]);

    if (r_Read.EndOfStream.Equals(true)) 
       goto next;
}

next:
{
    textBox2.Text = r_Read.EndOfStream.ToString();
    ReadStream.Close();
}

我尝试过使用 if 来做这样的事情

string NameOfFile = tbOpenFile.Text;
FileStream ReadStream = new FileStream(NameOfFile, FileMode.Open, FileAccess.ReadWrite);

StreamReader r_Read = new StreamReader(ReadStream);
i = 1;

lb1.Items.Clear();

for (; ; i++)
{
    tbOpenFile.Text = r_Read.ReadLine();
    lines[i] = tbOpenFile.Text;

    lb1.Items.Add(lines[i]);

    if (r_Read.EndOfStream.Equals(true)) 
    {
        textBox2.Text = r_Read.EndOfStream.ToString();
        ReadStream.Close();
    }
}

并且喜欢这样尝试使用 while

string NameOfFile = tbOpenFile.Text;
FileStream ReadStream = new FileStream(NameOfFile, FileMode.Open, FileAccess.ReadWrite);

StreamReader r_Read = new StreamReader(ReadStream);
i = 1;

lb1.Items.Clear();

while(r_Read.EndOfStream.Equals(true))
{
    for (; ; i++)
    {
        tbOpenFile.Text = r_Read.ReadLine();
        lines[i] = tbOpenFile.Text;

        lb1.Items.Add(lines[i]);
    }

    continue;

    textBox2.Text = r_Read.EndOfStream.ToString();
    ReadStream.Close();
}

但我总是出错

无法访问的代码

【问题讨论】:

  • continue; 之后的代码没有执行——那是你无法访问的代码。
  • if (r_Read.EndOfStream.Equals(true)) 中断;
  • Goto 是 非常 不好的做法。我想知道为什么这不是第一条评论。
  • @bytecode77 OP 正试图摆脱 goto
  • while (!r_Read.EndOfStream) {...} 并完全删除for

标签: c# loops if-statement for-loop while-loop


【解决方案1】:

您的问题在for (; ; i++) 它将永远递增,为您的 for 循环添加一个条件。

【讨论】:

    【解决方案2】:

    您处理文件的方式并不常见。您可以使用 while 循环更轻松地完成所有工作:

    using (StreamReader streamReader = File.OpenText(path))
    {
        while (!streamReader.EndOfStream)
        {
            string line = streamReader.ReadLine();
            // Process "line" here...
        }
    }
    

    【讨论】:

      【解决方案3】:

      你需要跳出循环。

      for (; ; i++)
      {
          tbOpenFile.Text = r_Read.ReadLine();
          lines[i] = tbOpenFile.Text;
      
          lb1.Items.Add(lines[i]);
      
          if (r_Read.EndOfStream.Equals(true)) 
          {
              textBox2.Text = r_Read.EndOfStream.ToString();
              ReadStream.Close();
              break;
          }
      }
      

      【讨论】:

        【解决方案4】:

        continue; 之后的代码不执行 - 那是您无法访问的代码。而是 break 到达文件末尾后的循环。

        试试下面的 - 我已经删除了 while 循环,因为它不需要。

        StreamReader r_Read = new StreamReader(ReadStream);
        i = 1;
        
        lb1.Items.Clear();
        
        for (; ; i++)
        {
            tbOpenFile.Text = r_Read.ReadLine();
            lines[i] = tbOpenFile.Text;
        
            lb1.Items.Add(lines[i]);
            if (r_Read.EndOfStream.Equals(true))
            {
                break; // exits the loop.
            }
        }
        
        textBox2.Text = r_Read.EndOfStream.ToString();
        ReadStream.Close();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-06
          • 2018-02-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多