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

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

在本教程中,请完成以下任务:

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

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

必备条件

必须安装 Visual Studio。

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

创建项目

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

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

    Screenshot that shows the Create a new project window.

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

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

    注意

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

    Screenshot that shows the Install more tools and features link.

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

    Screenshot showing the .NET Core cross-platform development workload in the Visual Studio Installer.

    在 Visual Studio 安装程序中,选择“修改”。 系统可能会提示你保存工作内容。 选择“继续”以安装该工作负载。

    返回到“创建项目”过程中的步骤 2。

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

    Screenshot that shows how to name your project 'Calculator' in the 'Configure your new project' window in Visual Studio.

  4. 在“其他信息”窗口中,验证“目标框架”字段中是否显示了“.NET Core 3.1”。 然后选择“创建”。

    Screenshot of the Additional information window in Visual Studio showing .NET Core 3.1 as the target framework for the new project.

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

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

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

    Screenshot that shows the Create a new project window.

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

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

    注意

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

    Screenshot that shows the Install more tools and features link.

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

    Screenshot showing the .NET desktop development workload in the Visual Studio Installer.

    在 Visual Studio 安装程序中,选择“修改”。 系统可能会提示你保存工作内容。 选择“继续”以安装该工作负载。

    返回到“创建项目”过程中的步骤 2。

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

    Screenshot that shows how to name your project 'Calculator' in the 'Configure your new project' window in Visual Studio.

  4. 在“其他信息”窗口中,为“目标框架”字段选择“.NET 8.0”。 然后选择“创建”。

    Screenshot of the Additional information window in Visual Studio showing .NET 8.0 selected as the target framework for the new project.

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

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

注意

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

创建应用

在本部分中,你将完成以下任务:

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

探索整数数学运算

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

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

    Screenshot that shows deleting the default Hello World code from your new calculator app.

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

  2. 在其位置输入以下代码:

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

    请注意,输入代码时,Visual Studio 中的 IntelliSense 功能会提供自动完成该条目的选项。

    Animation of integer math code that shows the IntelliSense autocomplete feature in the Visual Studio IDE.

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

    Screenshot that shows choosing the Calculator button to run the app from the toolbar.

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

    Screenshot that shows a console window with the results of integer math.

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

  5. 关闭控制台窗口。

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

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

    Screenshot that shows the line to replace in the program file.

    将该行替换为以下代码:

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

    如果你输入代码,Visual Studio IntelliSense 功能将提供自动完成该条目的选项。

    Animation of integer math code that shows the IntelliSense autocomplete feature in the Visual Studio IDE.

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

    Screenshot that showing selecting the Calculator button to run the app from the Debug toolbar.

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

    Screenshot of a Console window showing the results of integer math.

  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 相加 。

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

    Screenshot of a Console window showing the Calculator app with prompts.

  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 相加 。

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

    Screenshot of a Console window showing the Calculator app with prompts.

添加小数运算功能

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

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

Screenshot of a Console window that shows the Calculator app returning an inexact whole number as a result.

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

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

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

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

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

    Animation of the Find and Replace control showing how to change the int variable to float.

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

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

    Screenshot of a Console window showing the Calculator app that now returns a decimal numeral as a result.

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

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

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

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

    Screenshot of a Console window showing the Calculator app that now accepts decimal numbers and returns a longer decimal result.

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

调试应用

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

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

提示

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

修复“被零除”错误

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

Screenshot of the Visual Studio code editor showing a line highlighted in yellow and an Exception Unhandled error for 'Attempted to divide by zero'.

注意

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

现在更改代码以解决此错误。 在 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 语句的部分应如以下屏幕截图所示:

Screenshot showing the revised switch section in the Visual Studio code editor.

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

Screenshot of a Console window with a repeated prompt to provide a nonzero number.

修复“格式”错误

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

Screenshot showing an unhandled format error in the Visual Studio code editor.

Screenshot showing an unhandled format error in the Visual Studio code editor.

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

修改代码

可将应用分为两个类: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 。 结果应类似于以下屏幕截图:

    Screenshot showing a Console window with the refactored Calculator app.

    Screenshot showing a Console window with the refactored Calculator app.

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

关闭应用程序

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

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

    Screenshot that shows closing the Output pane in 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” 。

    Screenshot of the Git source control buttons below the Solution Explorer pane, with the Add to Source Control button highlighted.

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

    Screenshot of the Create a Git Repository dialog window where you can sign in to GitHub.

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

    提示

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

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

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

    Screenshot of the repo status bar that's below the Solution Explorer pane in 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;
    }
}

后续步骤

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