C# 等待 while 循环的一部分完成以执行另一个操作

标签 c#

我正在尝试将一个值转换为另一个值。我正在使用 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");
    }
}

我想等到所有解析成功的值都写完了,然后把没有解析的值写到最后。

最佳答案

最简单的方法是将它们写入某种缓冲区,例如 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 关键字将绕过循环 block 的其余部分,重新​​评估 while 条件,并进一步迭代如果有说明)。

关于C# 等待 while 循环的一部分完成以执行另一个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835299/

相关文章:

c# - 单击按钮后,工具提示计算了 asp 按钮的链接

c# - 在 C# 中读取 SQL Server 数据库中的 "real"数据类型

c# - 将自定义对象序列化为 XML

c# - Ajax.BeginForm 中的 LoadingElementId 不显示加载图像

c# - 为什么 HttpClient 的 GetStringAsync 慢得令人难以置信?

C#——如何处理重复的 multicastdelegate?

c# - Resharper 和 C# Catch 子句

c# - Entity Framework - 如何避免命令不同步异常

c# - 如何检查多个表中的 ID 值

c# - 覆盖第三方库的私有(private)方法