如何 Convert.ToInt32(Console.ReadLine());工作?

How does Convert.ToInt32(Console.ReadLine()); work?

我是 C# 编程的新手,我目前正在做一个看起来像这样的练习:

  1. 读取用户的名字和姓氏并将其保存在变量中
  2. 欢迎用户
  3. 询问用户他们今年的年龄,并将其保存在具有适当数据类型的变量中
  4. 根据指定的年龄(年龄乘以 365)计算此人以前生活的天数并显示。

所以我的代码工作正常,但如果有人能解释转换的事情,我将不胜感激。我进行了大量 google 搜索和阅读,但我似乎无法理解它是如何工作的。

int age = Convert.ToInt32(Console.ReadLine());

有人可以为我的代码分解这个吗?

谢谢!

        Console.Title = "Programming in C # - Exercise 1";

        // Here the system asks the user to enter their full name.
        Console.WriteLine("System: Enter your full name: ");

        // Here I declare a variable and assign it a value.
        string name = Console.ReadLine();

        // Here the system welcomes the user.
        Console.WriteLine("System: Welcome " + name + "!");

        // Here the system asks how old the user is.
        Console.WriteLine("System: How old are you?");

        // This is the part i would like to have explained for me.
        int age = Convert.ToInt32(Console.ReadLine());

        // Here I declare a variable and calculate age in days.
        int ageInDays = age * 365;

        // Here the system answers.
        Console.WriteLine("System: " + age + "?!" + " That means you are " + ageInDays + " days old!");

        // Waiting to close the program.
        Console.ReadLine();

你从控制台读取一行,然后将其转换为一个32位整数,然后存储在变量age中。

但是这很危险,因为您没有检查用户是否输入了任何非数字字符。如果用户输入“Foo”,您的应用程序会做什么?在您的应用程序中,这似乎不是什么大问题,但请注意先检查输入,然后在输入有效时继续。

Console.ReadLine 以字符串数据类型的形式从控制台读取输入。这是一种数据类型,用非常非常基本的术语来说,它代表文本。在引擎盖下,每个字符都由一个代码表示。您以前可能听说过其中一些编码术语,例如 ASCII 或 UTF。例如,ASCII 中的 A 由数字 65 表示。数字也是如此。 ASCII码48表示数字0.

我们有时需要将数字的字符串表示形式转换为其实际数值。通常用于执行数学运算等。为此,我们需要将“在 ASCII 中表示为 48 的 0”转换为文字 0。这是由 Convert.ToInt32 完成的,正如您所做的那样。它读取字符串,然后说“哦,我是 0 的文本表示,因此我将输出数字 0”。

所以在一个非常简短的总结中,它采用数字的文本表示并将数据更改为文字数值。

C# 中的

Console.Realine() 为您提供字符串输出..

所以为了转换成数值...转换函数会很有用..

尽管您现在已经有所了解,但我想指出 developers/coders 应该始终预料到意外情况,例如用户输入了错误的类型,例如年龄不能转换为整数的值或名称的大小写,他们只需按回车键而不输入名称。

因此,在这种情况下要检查输入的名称,请使用 string.IsNullOrWhiteSpace. For integer type, consider using int.TryParse

关于连接字符串值或字符串值,例如考虑使用整数进行字符串插值,这可能是编码人员的偏好,因为有些人会喜欢将 someString + anotherString 串起来,或者如果仅使用字符串,则有 String.Concat and StringBuilder Class

以下是您的代码的略微修改版本。由于您刚刚起步,请将其收起以备后用,或者考虑从中吸取教训。

using System;

namespace Exercise1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Programming in C # - Exercise 1";

            Console.WriteLine("System: Enter your full name: ");

            string fullName = Console.ReadLine();
            
            /*
             * Never assume a value for name has been entered
             * https://docs.microsoft.com/en-us/dotnet/api/system.string.isnullorwhitespace?view=net-5.0
             */
            if (!string.IsNullOrWhiteSpace(fullName))
            {
                /*
                 * Note original code concatenated name variable with text, you can also use string interpolation
                 * https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
                 */
                Console.WriteLine($"System: Welcome {fullName}!");
            }
            else
            {
                Console.WriteLine("System: Welcome no name given!");
            }


            Console.WriteLine("System: How old are you?");
            string ageInput = Console.ReadLine();

            /*
             * int.TryParse, better than Convert.ToInt32 which is recommended in the remark section
             * for documentation for Convert.ToInt32.
             *
             * https://docs.microsoft.com/en-us/dotnet/api/system.int32.tryparse?view=net-5.0
             *
             */
            if (int.TryParse(ageInput, out var age))
            {
                int ageInDays = age * 365;
                /*
                 * Note original code concatenated name variable with text, you can also use string interpolation
                 * https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
                 */
                Console.WriteLine($"System: {age}?! That means you are {ageInDays} days old!");
            }
            else
            {
                Console.WriteLine("No age provided or the value was not a valid integer");
            }

            Console.WriteLine("Press any key to close this program");
            Console.ReadLine();

        }
    }
}