1

我正在尝试将一个值转换为另一个值。我正在使用 streamreader/writer 导入一个文本文件。我想知道我是否可以让 if 语句中的 while 循环的一部分等到循环的其余部分完成,然后再编写它应该写的内容。我知道这可能是一个简单的问题,但出于某种原因,我可以把手指放在上面。我没有使用多线程处理并且想远离异步。

using (StreamReader reader = new StreamReader(convertInput))
{
    string line;
    writer.WriteLine(formatter, "Original Value", "Converted Value");
    writer.WriteLine(formatter, "--------------", "---------------");
A:  while ((line = reader.ReadLine()) != null)
    {
            string str2BeConverted = line;
            long numHexToDex;
            if ((Int64.TryParse(line, NumberStyles.HexNumber, null, out numHexToDec)) == false)
            {
                    writer.WriteLine();
                    writer.Write(line + " " + "is not a Hexadecimal value.");
                    goto A;
            }

            Int64.TryParse(line, NumberStyles.HexNumber, null, out numHexToDec);
            string lineChanged = numHexToDec.ToString("G");
    }
}

我想等到所有成功解析的值都被写入,然后再写入最后没有的值。

4

1 回答 1

4

最简单的方法是将这些写入某种缓冲区,例如 StringBuilder,然后在处理完所有成功的元素后将 StringBuilder 的内容写入:

using (StreamReader reader = new StreamReader(convertInput))
{
    string line;
    Stringbuilder builder = new StringBuilder();
    writer.WriteLine(formatter, "Original Value", "Converted Value");
    writer.WriteLine(formatter, "--------------", "---------------");
    while ((line = reader.ReadLine()) != null)
    {
            string str2BeConverted = line;
            long numHexToDex;
            if ((Int64.TryParse(line, NumberStyles.HexNumber, null, out numHexToDec)) == false)
            {

                    builder.AppendLine();
                    builder.Append(line + " " + "is not a Hexadecimal value.");
                    continue; //there is ALWAYS an alternative to goto
            }

            Int64.TryParse(line, NumberStyles.HexNumber, null, out numHexToDec);
            string lineChanged = numHexToDec.ToString("G");
    }

    writer.Write(builder.ToString();
}

此外,正如许多评论所说,使用goto的代码永远不是好代码。总有一些你可以做的更正确的事情,在这种情况下它非常简单(continue关键字将绕过循环块的其余部分,重新​​评估 while 条件,并在指示时进一步迭代)。

于 2012-08-06T20:24:30.027 回答