Console.ReadLine()没有在C#中保持控制台打开

use*_*287 1 c# console.readline

我正在学习C#(VS 2012 Professional),在下面的示例中,即使该Console.ReadLine()方法是代码块中的最后一条指令,控制台窗口也不会保持打开状态:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace testing
{
    class Program
    {
    static void Main(string[] args)
    {

        // fahrenheit conversion example
        Console.Write("Enter temp in fahrenheit: ");
        double fahrenheit = Console.Read();
        double celsius = (fahrenheit - 32.0) * (5.0 / 9.0);
        Console.WriteLine("Celsius is: " + celsius);
        Console.ReadLine();

    }

    }
}
Run Code Online (Sandbox Code Playgroud)

Console.ReadLine()方法的实现中是否存在复杂性,或者代码块中可能存在冲突的代码?

Ste*_*eve 8

您可能键入fahrenheit变量的值,然后按Return(Enter)键.这将获得Read调用中的值和ReadLine中的Enter.

改成

Console.Write("Enter temp in fahrenheit: ");
double fahrenheit;
string userInput = Console.ReadLine();
if(double.TryParse(userInput, out fahrenheit))
{
    double celsius = (fahrenheit - 32.0) * (5.0 / 9.0);
    Console.WriteLine("Celsius is: " + celsius);
}
else
{
    Console.WriteLine("Non a valid double value");
}
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

此外,与Console.Read不同,Console.ReadLine返回一个字符串,因此您需要在尝试使用它之前解析并转换为double.这可以通过double.TryParse来完成,当用户没有键入有效的数字double时,它将返回false

Console.Read的另一个缺点是你需要在循环中调用它来读取用户键入的所有字符,直到Enter.如果您尝试转换12.8,则需要使用与Console.Read完全不同的代码.(查看上面链接中的MSDN示例)

  • +1 - 打败我,将最后一个改为`ReadKey`,也有效.(正在测试,虽然首先需要readline) (2认同)