C# 把两个步骤总结成一个步骤

C# 把两个步骤总结成一个步骤,c#,C#,在控制台应用程序中的一个类中,我编写了一个方法,该方法读取许多整数输入并对其求和。输入调用在另一个类(Input.ReadIntegerConsole())中编写的另一个方法,该类应该读取输入,然后如果输入是整数,则使第一个类的操作继续,否则写入“invalid choice”,方法如下: private void ReadInputAndSumNumbers() { Console.Write("\nNumber you choose? "); int.TryParse(Con

在控制台应用程序中的一个类中,我编写了一个方法,该方法读取许多整数输入并对其求和。输入调用在另一个类(
Input.ReadIntegerConsole()
)中编写的另一个方法,该类应该读取输入,然后如果输入是整数,则使第一个类的操作继续,否则写入“invalid choice”,方法如下:

private void ReadInputAndSumNumbers()
{
    Console.Write("\nNumber you choose? ");
    int.TryParse(Console.ReadLine(), out numberChosen);
    numberChosen = Input.ReadIntegerConsole();
    sum += numberChosen;
问题是这样,当我运行应用程序时,控制台会问:您选择的号码是多少?然后不管我输入什么,程序什么也不做。此时,我将输入另一个输入,直到现在,
ReadIntegerConsole
方法才开始:如果它是整数,操作将继续,否则程序将显示“invalid choice”。如何做到这一点程序在一步而不是两步中完成所有操作,因此它读取我的输入并立即验证它是否为整数,并决定继续或显示“无效选择”?如何做到这一点而不必写两个输入?我确信Input.ReadIntegerConsole代码编写正确,这就是为什么我没有在这里显示它。我试着在类的许多不同部分编写
numberChosen=Input.ReadIntegerConsole()
,但它从未起作用。我还尝试过编写
numbercosen=int.Parse(ConsoleReadLine())=Input.ReadIntegerConsole()
,但它当然不起作用

Console.Write("\nNumber you choose? ");
int.TryParse(Console.ReadLine(), out numberChosen);
numberChosen = Input.ReadIntegerConsole();
sum += numberChosen;
您没有提供
Input.ReadIntegerConsole
的实现,但很可能它还会调用
Console.ReadLine
并将其解析为int(与上面的行相同)。因此,基本上,您的代码是:

  • 打印消息
  • 等待用户输入,解析为
    int
    并存储在
    numberChosen
  • 调用
    Input.ReadIntegerConsole
    ,它可能会等待用户输入,将其解析为
    int
    并返回,然后将其存储在
    numberChosen
  • 将数字添加到
    sum
  • 因此,当您输入第一个数字时,它会完全按照您的想法进行输入。但是,
    input.ReadIntegerConsole
    会要求另一个输入并覆盖原始输入(因此,如果您输入垃圾,它会显示“无效值”)。控制台的第二次读取解释了为什么程序看起来什么也不做,因为它在等待更多的输入


    删除手动
    控制台。ReadLine
    摆脱了冗余的读取/解析,这就是它修复代码的原因。这并不是说它在没有控制台的情况下工作。ReadLine,而是说您正在使用的方法隐藏了对它的调用。

    如果您问的是我认为您在问的问题,我想您需要:

    private void ReadInputAndSumNumbers()
    {
        Console.Write("\nNumber you choose? ");
        int numberChosen;
        if(int.TryParse(Console.ReadLine(), out numberChosen)) {
            sum += numberChosen;
        }
        else {
            Console.WriteLine("Invalid choice.");
        }
    }
    
    int.TryParse
    是一个带有
    out
    参数的方法,这意味着解析结果将分配给numbercosen。它返回一个
    bool
    ,但是:如果成功,则返回true(传递的字符串可解析为
    int
    ),如果失败,则返回false。所以它说的是:

    如果int.TryParse可以从输入字符串创建int,则变量numberChosen在方法完成时存储结果;将numberChosen添加到sum中。
    否则,它将失败,并写入“无效选择”


    Out参数可能会有点混乱,但它们很强大。但是如果我解释得不好,这里有一些链接:,

    ReadIntergerConsole方法有哪些?您的第一个控制台似乎什么也没做。readline\n有关代码的更多详细信息将有助于更好地理解问题。您能为其他方法添加代码吗?同时,尝试删除这一行
    int.TryParse(Console.ReadLine(),out numberChosen)
    一次。如果没有更多的代码,就不可能理解出了什么问题。请添加调用此代码段的代码以及ReadIntegerConsolew的代码。非常感谢大家!你是对的,Arghya C,去掉那条线就成功了,现在它成功了!正如您所说,代码,第一个console.readline是无用的。我想如果没有它,程序将无法读取我的输入,因此整个程序将无法工作。但是看起来程序可以在没有Console.ReadLine的情况下读取我的输入。非常感谢你!我花了几个小时想弄明白。非常感谢。是的,就是这样!!!Input.ReadIntegerConsole确实调用了另一个Console.ReadLine!现在我明白了为什么程序等待另一个输入。非常感谢你!旁注:如果要多次执行此操作,可能需要将方法块放入循环中,直到用户键入特定输入,例如“完成”。