教程:在 Visual Studio 中创建一个简单的 C# 控制台应用(第 1 部分,共 2 部分)

适用范围:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

在本教程中,你将使用 Visual Studio 创建和运行 C# 控制台应用,并探索 Visual Studio 集成开发环境 (IDE) 的部分功能。 本教程是由两个部分构成的系列教程的第一部分。

本教程介绍以下操作:

  • 创建一个 Visual Studio 项目。
  • 创建一个 C# 控制台应用。
  • 调试应用。
  • 关闭应用。
  • 检查完整的代码。

在第 2 部分,你将扩展此应用以添加更多项目、了解调试技巧和引用第三方包。

必备条件

必须安装 Visual Studio。

如果尚未安装 Visual Studio,请转到 Visual Studio 下载页免费安装。

创建项目

若要开始,请创建一个 C# 应用程序项目。 项目类型随附了所需的全部模板文件。

  1. 打开 Visual Studio,然后在“开始”窗口中选择“创建新项目”。

    显示“创建新项目”窗口的屏幕截图。

  2. 在“创建新项目”窗口中,从“语言”列表中选择“C#”。 接下来,从“平台”列表中选择“Windows”,然后从“项目类型”列表中选择“控制台”。

    应用语言、平台和项目类型筛选器之后,选择“控制台应用程序”模板,然后选择“下一步” 。

    注意

    如果未看到“控制台应用程序”模板,请选择“安装更多工具和功能” 。

    显示“安装更多工具和功能”链接的屏幕截图。

    然后,在 Visual Studio 安装程序中,选择“.NET Core 跨平台开发”工作负载 。

    显示 Visual Studio 安装程序中“.NET Core 跨平台开发”工作负载的屏幕截图。

    之后,在 Visual Studio 安装程序中选择“修改”按钮 。 系统可能会提示你保存所有内容;如果出现提示,请按照指示进行操作。 接下来,选择“继续”,以安装工作负载 。 然后,返回到“创建项目”过程中的步骤 2。

  3. 在“配置新项目”窗口中,在“项目名称”框中键入或输入“计算器”。 然后,选择“下一步”。

    显示在“配置新项目”窗口中将项目命名为“Calculator”的屏幕截图。

  4. 在“附加信息”窗口中,应已为目标框架选择“.NET Core 3.1” 。 如果未选择,则请选择“.NET Core 3.1”。 然后,选择“创建”。

    显示确保在“其他信息”窗口中选择“.NET Core 3.1”的屏幕截图。

    Visual Studio 随即打开新项目,其中包含默认的“Hello World”代码。 如果要在编辑器中查看它,可以在“解决方案资源管理器”窗口中选择代码文件“Program.cs”,该窗口通常位于 Visual Studio 的右侧。

    默认“Hello World”代码调用 WriteLine 方法在控制台窗口中显示文本字符串“Hello, World!”。 如果按 F5,则可以在调试模式下运行默认程序。 在调试器中运行应用程序后,控制台窗口将保持打开状态。 按任意键关闭控制台窗口。

  1. 打开 Visual Studio,然后在“开始”窗口中选择“创建新项目”。

    显示“创建新项目”窗口的屏幕截图。

  2. 在“创建新项目”窗口中选择“所有语言”,然后从下拉列表中选择“C#” 。 从“所有平台”列表中选择“Windows”,然后从“所有项目类型”列表中选择“控制台” 。

    应用语言、平台和项目类型筛选器后,选择“控制台应用”模板,然后选择“下一步” 。

    注意

    如果未看到“控制台应用”模板,请选择“安装更多工具和功能” 。

    显示“安装更多工具和功能”链接的屏幕截图。

    在 Visual Studio 安装程序中选择“.NET 桌面开发”工作负载,然后选择“修改” 。

    显示 Visual Studio 安装程序中的“.NET 桌面开发”工作负载的屏幕截图。

  3. 在“配置新项目”窗口中,在“项目名称”框中键入“Calculator”,然后选择“下一步” 。

    显示在“配置新项目”窗口中将项目命名为“Calculator”的屏幕截图。

  4. 在“其他信息”窗口中,应已选择“.NET 6.0”作为目标框架 。 选择“创建” 。

    显示在“其他信息”窗口中选择了“.NET 6.0”的屏幕截图。

    Visual Studio 随即打开新项目,其中包含默认的“Hello World”代码。

    如果要在编辑器中查看它,可以在“解决方案资源管理器”窗口中选择代码文件“Program.cs”,该窗口通常位于 Visual Studio 的右侧。

    单个代码语句调用 WriteLine 方法在控制台窗口中显示文本字符串“Hello, World!”。 如果按 F5,则可以在调试模式下运行默认程序。 在调试器中运行应用程序后,控制台窗口将保持打开状态。 按任意键关闭控制台窗口。

    注意

    从 .NET 6 开始,使用控制台模板的新项目会生成与以前版本不同的代码。 若要了解详细信息,请参阅新的 C# 模板生成顶级语句页。

创建应用

本部分的操作:

  • 探索 C# 中的一些基本整数数学运算。
  • 添加代码以创建一个基本计算器应用。
  • 调试该应用,以查找并修复错误。
  • 优化代码,使其更高效。

探索整数数学运算

首先在 C# 中进行一些基本的整数数学运算。

  1. 在代码编辑器中,删除默认“Hello World”代码。

    显示从新的计算器应用中删除默认 Hello World 代码的屏幕截图。

    具体而言,删除显示 Console.WriteLine("Hello World!"); 的行。

  2. 在其原位置,键入以下代码:

            int a = 42;
            int b = 119;
            int c = a + b;
            Console.WriteLine(c);
            Console.ReadKey();
    

    请注意,执行此操作时,Visual Studio 中的 IntelliSense 功能会提供自动完成该项的选项。

    显示 Visual Studio IDE 中 IntelliSense 自动完成功能的整数数学运算代码动画。

  3. 选择“计算器”旁的绿色“开始”按钮以生成并运行程序,或按“F5”。

    显示从工具栏中选择“Calculator”按钮以运行应用的屏幕截图。

    随即会打开控制台窗口,显示 42 + 119 的总和,即 161。

    显示包含整数数学运算结果的控制台窗口的屏幕截图。

  4. (可选)可以更改运算符来更改结果。 例如,可以将 int c = a + b; 代码行中的 + 运算符更改为 - 进行减法运算,更改为 * 进行乘法运算,或更改为 / 进行除法运算。 然后,运行该程序时,结果也会改变。

  5. 关闭控制台窗口。

  1. 在“解决方案资源管理器”的右侧窗格中选择“Program.cs”,以在代码编辑器中显示该文件

  2. 在代码编辑器中,替换显示了 Console.WriteLine("Hello World!"); 的默认“Hello World”代码。

    显示要在 program 文件中替换的行的屏幕截图。

    将该行替换为以下代码:

        int a = 42;
        int b = 119;
        int c = a + b;
        Console.WriteLine(c);
        Console.ReadKey();
    

    如果你键入代码,则 Visual Studio IntelliSense 功能将提供用于自动完成输入的选项。

    显示 Visual Studio IDE 中 IntelliSense 自动完成功能的整数数学运算代码动画。

  3. 若要生成并运行应用,请按 F5,或者在顶部工具栏中选择名称“Calculator”旁边的绿色箭头 。

    显示从“调试”工具栏中选择“Calculator”按钮以运行应用的屏幕截图。

    随即会打开控制台窗口,其中显示了 42 + 119 的总和,即 161。

    显示整数数学运算结果的控制台窗口的屏幕截图。

  4. 关闭控制台窗口。

  5. (可选)可以更改运算符来更改结果。 例如,可以将 int c = a + b; 代码行中的 + 运算符更改为 - 进行减法运算,更改为 * 进行乘法运算,或更改为 / 进行除法运算。 运行应用时,结果会相应地更改。

添加代码以创建计算器

向项目添加一组更复杂的计算器代码以继续操作。

  1. 在代码编辑器中,将 Program.cs 中的所有代码替换为以下新代码:

        using System;
    
        namespace Calculator
        {
            class Program
            {
                static void Main(string[] args)
                {
                    // Declare variables and then initialize to zero.
                    int num1 = 0; int num2 = 0;
    
                    // Display title as the C# console calculator app.
                    Console.WriteLine("Console Calculator in C#\r");
                    Console.WriteLine("------------------------\n");
    
                    // Ask the user to type the first number.
                    Console.WriteLine("Type a number, and then press Enter");
                    num1 = Convert.ToInt32(Console.ReadLine());
    
                    // Ask the user to type the second number.
                    Console.WriteLine("Type another number, and then press Enter");
                    num2 = Convert.ToInt32(Console.ReadLine());
    
                    // Ask the user to choose an option.
                    Console.WriteLine("Choose an option from the following list:");
                    Console.WriteLine("\ta - Add");
                    Console.WriteLine("\ts - Subtract");
                    Console.WriteLine("\tm - Multiply");
                    Console.WriteLine("\td - Divide");
                    Console.Write("Your option? ");
    
                    // Use a switch statement to do the math.
                    switch (Console.ReadLine())
                    {
                        case "a":
                            Console.WriteLine($"Your result: {num1} + {num2} = " + (num1 + num2));
                            break;
                        case "s":
                            Console.WriteLine($"Your result: {num1} - {num2} = " + (num1 - num2));
                            break;
                        case "m":
                            Console.WriteLine($"Your result: {num1} * {num2} = " + (num1 * num2));
                            break;
                        case "d":
                            Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
                            break;
                    }
                    // Wait for the user to respond before closing.
                    Console.Write("Press any key to close the Calculator console app...");
                    Console.ReadKey();
                }
            }
        }
    
  2. 选择“Calculator”按钮或按 F5 运行应用 。

    控制台窗口即会打开。

  3. 在控制台窗口中,按照提示将数字 42 和 119 相加 。

    应用应如以下屏幕快照所示:

    控制台窗口的屏幕截图,其中显示了 Calculator 应用和提示。

  1. 在代码编辑器中,将 Program.cs 中的所有代码替换为以下新代码:

        // Declare variables and then initialize to zero.
        int num1 = 0; int num2 = 0;
    
        // Display title as the C# console calculator app.
        Console.WriteLine("Console Calculator in C#\r");
        Console.WriteLine("------------------------\n");
    
        // Ask the user to type the first number.
        Console.WriteLine("Type a number, and then press Enter");
        num1 = Convert.ToInt32(Console.ReadLine());
    
        // Ask the user to type the second number.
        Console.WriteLine("Type another number, and then press Enter");
        num2 = Convert.ToInt32(Console.ReadLine());
    
        // Ask the user to choose an option.
        Console.WriteLine("Choose an option from the following list:");
        Console.WriteLine("\ta - Add");
        Console.WriteLine("\ts - Subtract");
        Console.WriteLine("\tm - Multiply");
        Console.WriteLine("\td - Divide");
        Console.Write("Your option? ");
    
        // Use a switch statement to do the math.
        switch (Console.ReadLine())
        {
            case "a":
                Console.WriteLine($"Your result: {num1} + {num2} = " + (num1 + num2));
                break;
            case "s":
                Console.WriteLine($"Your result: {num1} - {num2} = " + (num1 - num2));
                break;
            case "m":
                Console.WriteLine($"Your result: {num1} * {num2} = " + (num1 * num2));
                break;
            case "d":
                Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
                break;
        }
        // Wait for the user to respond before closing.
        Console.Write("Press any key to close the Calculator console app...");
        Console.ReadKey();
    
  2. 选择“Calculator”按钮或按 F5 运行应用 。

    控制台窗口即会打开。

  3. 在控制台窗口中,按照提示将数字 42 和 119 相加 。

    应用应如以下屏幕快照所示:

    控制台窗口的屏幕截图,其中显示了 Calculator 应用和提示。

添加小数运算功能

现在调整代码以添加更多功能。

当前的计算器应用仅接受并返回整数。 例如,如果运行该应用,将数字 42 除以数字 119,则结果为 0,这并不精确。

控制台窗口的屏幕截图,其中显示了 Calculator 应用返回不精确的整数作为结果。

若要修复代码以通过处理小数来提高精度,请执行以下操作:

  1. 在 Visual Studio 编辑器中的 Program.cs 内,按 Ctrl+H 打开“查找和替换”控件。

  2. 在该控件中键入“int”,在“替换”字段中键入“float” 。

  3. 在该控件中选择“匹配大小写”和“全字匹配”对应的图标,或者按 Alt+C 和 Alt+W 。

  4. 选择“全部替换”图标或按 Alt+A 运行搜索和替换 。

    显示如何将 int 变量更改为 float 的“查找和替换”控件动画。

  5. 再次运行计算器应用,将数字 42 除以数字 119 。

    该应用现在返回的是小数而不是 0。

    “控制台”窗口的屏幕截图,其中显示了 Calculator 应用现在返回小数作为结果。

现在,应用可以生成小数结果。 对代码再做一些调整,使应用也可以计算小数。

  1. 使用“查找和替换”控件将 float 变量的每个实例更改为 double,并将 Convert.ToInt32 方法的每个实例更改为 Convert.ToDouble

  2. 运行计算器应用,将数字 42.5 除以数字 119.75 。

    该应用现在接受小数值,并返回更长的小数作为结果。

    “控制台”窗口的屏幕截图,其中显示了 Calculator 应用现在接受小数,并返回更长的小数结果。

    修改代码部分,你将减少结果中的小数位数。

调试应用

你已改进了基本计算器应用,但该应用目前还不能处理异常,例如用户输入错误。 例如,如果用户尝试除以零或者输入意外的字符,则应用可能会停止工作、返回错误或返回意外的非数值结果。

现在来演练一些常见的用户输入错误,在调试程序中找到它们(若其出现),并在代码中修复它们。

提示

有关调试器及其工作原理的详细信息,请参阅初步了解 Visual Studio 调试器

修复“被零除”错误

如果你尝试将数字除以零,则控制台应用可能会冻结,并在代码编辑器中显示哪些内容是错误的。

Visual Studio 代码编辑器的屏幕截图,其中以黄色突出显示了一行,并显示了“尝试除以零”的“未经处理的异常”错误。

注意

有时,应用不会冻结且调试器不会显示“被零除”错误。 相反,应用可能会返回意外的非数字结果,如无穷符号。 以下代码修复仍然适用。

若要更改代码以处理此错误,请执行以下操作:

  1. 在 Program.cs 中,将 case "d": 的代码替换为以下代码:

             // Ask the user to enter a non-zero divisor until they do so.
                 while (num2 == 0)
                 {
                     Console.WriteLine("Enter a non-zero divisor: ");
                     num2 = Convert.ToInt32(Console.ReadLine());
                 }
                 Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
                 break;
         }
    

    替换代码后,包含 switch 语句的部分应如以下屏幕截图所示:

    显示 Visual Studio 代码编辑器中修改后的 switch 部分的屏幕截图。

现在,将任意数字除以零时,该应用会要求输入另一个数字,并且在你提供非零数字之前,它会不断地要求你这样做。

控制台窗口的屏幕截图,其中显示应用反复提示输入非零数字。

修复“格式”错误

如果在应用要求输入数字字符时你输入了字母字符,应用将会冻结。 Visual Studio 将显示代码编辑器中的哪些内容是错误的。

显示 Visual Studio 代码编辑器中未经处理的格式错误的屏幕截图。

显示 Visual Studio 代码编辑器中未经处理的格式错误的屏幕截图。

若要防止此异常,可以重构先前输入的代码。

修改代码

可将应用分为两个类:CalculatorProgram,而不是依赖于 program 类来处理所有代码。

Calculator 类处理大量的计算工作,而 Program 类则会处理用户界面和错误处理工作。

现在就开始吧。

  1. 在 Program.cs 中,删除所有内容并添加以下新的 Calculator 类:

    class Calculator
    {
        public static double DoOperation(double num1, double num2, string op)
        {
            double result = double.NaN; // Default value is "not-a-number" if an operation, such as division, could result in an error.
    
            // Use a switch statement to do the math.
            switch (op)
            {
                case "a":
                    result = num1 + num2;
                    break;
                case "s":
                    result = num1 - num2;
                    break;
                case "m":
                    result = num1 * num2;
                    break;
                case "d":
                    // Ask the user to enter a non-zero divisor.
                    if (num2 != 0)
                    {
                        result = num1 / num2;
                    }
                    break;
                // Return text for an incorrect option entry.
                default:
                    break;
            }
            return result;
        }
    }
    
    
  2. 另外还添加新的 Program 类,如下所示:

    class Program
    {
        static void Main(string[] args)
        {
            bool endApp = false;
            // Display title as the C# console calculator app.
            Console.WriteLine("Console Calculator in C#\r");
            Console.WriteLine("------------------------\n");
    
            while (!endApp)
            {
                // Declare variables and set to empty.
                string numInput1 = "";
                string numInput2 = "";
                double result = 0;
    
                // Ask the user to type the first number.
                Console.Write("Type a number, and then press Enter: ");
                numInput1 = Console.ReadLine();
    
                double cleanNum1 = 0;
                while (!double.TryParse(numInput1, out cleanNum1))
                {
                    Console.Write("This is not valid input. Please enter an integer value: ");
                    numInput1 = Console.ReadLine();
                }
    
                // Ask the user to type the second number.
                Console.Write("Type another number, and then press Enter: ");
                numInput2 = Console.ReadLine();
    
                double cleanNum2 = 0;
                while (!double.TryParse(numInput2, out cleanNum2))
                {
                    Console.Write("This is not valid input. Please enter an integer value: ");
                    numInput2 = Console.ReadLine();
                }
    
                // Ask the user to choose an operator.
                Console.WriteLine("Choose an operator from the following list:");
                Console.WriteLine("\ta - Add");
                Console.WriteLine("\ts - Subtract");
                Console.WriteLine("\tm - Multiply");
                Console.WriteLine("\td - Divide");
                Console.Write("Your option? ");
    
                string op = Console.ReadLine();
    
                try
                {
                    result = Calculator.DoOperation(cleanNum1, cleanNum2, op);
                    if (double.IsNaN(result))
                    {
                        Console.WriteLine("This operation will result in a mathematical error.\n");
                    }
                    else Console.WriteLine("Your result: {0:0.##}\n", result);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message);
                }
    
                Console.WriteLine("------------------------\n");
    
                // Wait for the user to respond before closing.
                Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: ");
                if (Console.ReadLine() == "n") endApp = true;
    
                Console.WriteLine("\n"); // Friendly linespacing.
            }
            return;
        }
    }
    
  3. 选择“Calculator”按钮或按 F5 运行应用 。

  4. 按照提示,用数字 42 除以数字 119 。 结果应类似于以下屏幕截图:

    控制台窗口的屏幕截图,其中显示了已重构的 Calculator 应用。

    控制台窗口的屏幕截图,其中显示了已重构的 Calculator 应用。

    现在可以运行更多计算,直到选择关闭控制台应用。 结果中的小数位数也会减少。 如果输入错误的字符,则会得到相应的错误响应。

关闭应用程序

  1. 如果尚未关闭计算器应用,现在请将其关闭。

  2. 关闭 Visual Studio 中的输出窗格。

    显示关闭 Visual Studio 中的“输出”窗格的屏幕截图。

  3. 在 Visual Studio 中,按 Ctrl+S 保存应用 。

添加 Git 源代码管理

现在你已经创建了应用,可能需要将它添加到 Git 存储库。 Visual Studio 通过 Git 工具简化了该过程,你可直接从 IDE 中使用这些工具。

提示

Git 是使用最广泛的新式版本控制系统,因此无论你是专业开发人员,还是正在学习如何编码,Git 都非常有用。 如果你是刚刚接触 Git,可访问 https://git-scm.com/ 网站开始了解。 在这里,你能找到速查表、畅销在线图书和 Git 基础知识视频。

若要将代码与 Git 关联,需要首先创建一个新的 Git 存储库来容纳代码:

  1. 在 Visual Studio 右下角的状态栏中,选择“添加到源代码管理”,然后选择“Git” 。

    “解决方案资源管理器”窗格下的 Git 源代码管理按钮的屏幕截图,其中突出显示了“添加到源代码管理”按钮。

  2. 在“创建 Git 存储库”对话框中,登录到 GitHub。

    “创建 Git 存储库”对话框窗口的屏幕截图,可在其中登录到 GitHub。

    存储库名称根据你的文件夹位置自动填充。 默认情况下,新存储库是专用的,这意味着只有你可以访问它。

    提示

    无论存储库是公用的还是专用的,都最好将代码的远程备份安全地存储在 GitHub 上。 即使你不与团队合作,也可使用任意计算机上在远程存储库中访问你的代码。

  3. 选择“创建并推送”。

    创建存储库后,状态栏中会显示状态详细信息。

    存储库状态栏的屏幕截图,它位于 Visual Studio 的“解决方案资源管理器”窗格下。

    带箭头的第一个图标显示当前分支中的传出/传入提交数。 可以使用此图标来拉取任何传入提交或推送任何传出提交。 还可选择先查看这些提交。 为此,请选择图标,然后选择“查看传出/传入”。

    带铅笔的第二个图标显示代码的未提交更改数。 可选择此图标,在“Git 更改”窗口中查看这些更改。

若要详细了解如何在应用中使用 Git,请参阅 Visual Studio 版本控制文档

查看:代码完成

在本教程中,你对计算器应用做出了许多更改。 该应用现在可以更高效地处理计算资源,并可处理大多数的用户输入错误。

以下是完整代码,全部显示在同一个位置:


class Calculator
{
    public static double DoOperation(double num1, double num2, string op)
    {
        double result = double.NaN; // Default value is "not-a-number" which we use if an operation, such as division, could result in an error.

        // Use a switch statement to do the math.
        switch (op)
        {
            case "a":
                result = num1 + num2;
                break;
            case "s":
                result = num1 - num2;
                break;
            case "m":
                result = num1 * num2;
                break;
            case "d":
                // Ask the user to enter a non-zero divisor.
                if (num2 != 0)
                {
                    result = num1 / num2;
                }
                break;
            // Return text for an incorrect option entry.
            default:
                break;
        }
        return result;
    }
}

class Program
{
    static void Main(string[] args)
    {
        bool endApp = false;
        // Display title as the C# console calculator app.
        Console.WriteLine("Console Calculator in C#\r");
        Console.WriteLine("------------------------\n");

        while (!endApp)
        {
            // Declare variables and set to empty.
            string numInput1 = "";
            string numInput2 = "";
            double result = 0;

            // Ask the user to type the first number.
            Console.Write("Type a number, and then press Enter: ");
            numInput1 = Console.ReadLine();

            double cleanNum1 = 0;
            while (!double.TryParse(numInput1, out cleanNum1))
            {
                Console.Write("This is not valid input. Please enter an integer value: ");
                numInput1 = Console.ReadLine();
            }

            // Ask the user to type the second number.
            Console.Write("Type another number, and then press Enter: ");
            numInput2 = Console.ReadLine();

            double cleanNum2 = 0;
            while (!double.TryParse(numInput2, out cleanNum2))
            {
                Console.Write("This is not valid input. Please enter an integer value: ");
                numInput2 = Console.ReadLine();
            }

            // Ask the user to choose an operator.
            Console.WriteLine("Choose an operator from the following list:");
            Console.WriteLine("\ta - Add");
            Console.WriteLine("\ts - Subtract");
            Console.WriteLine("\tm - Multiply");
            Console.WriteLine("\td - Divide");
            Console.Write("Your option? ");

            string op = Console.ReadLine();

            try
            {
                result = Calculator.DoOperation(cleanNum1, cleanNum2, op);
                if (double.IsNaN(result))
                {
                    Console.WriteLine("This operation will result in a mathematical error.\n");
                }
                else Console.WriteLine("Your result: {0:0.##}\n", result);
            }
            catch (Exception e)
            {
                Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message);
            }

            Console.WriteLine("------------------------\n");

            // Wait for the user to respond before closing.
            Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: ");
            if (Console.ReadLine() == "n") endApp = true;

            Console.WriteLine("\n"); // Friendly linespacing.
        }
        return;
    }
}

后续步骤

继续学习本教程的第二部分: