练习 - 在方法中使用参数

已完成

创建方法时,通常需要提供一些信息供方法使用。 方法使用的信息称为参数。 可以根据需要提供任意数量的参数来完成其任务,或者根本不提供任何参数。

术语“parameter”和“argument”通常可互换使用。 但是,“parameter”是指方法签名中的变量。 “argument”是调用方法时传递的值。

向方法添加参数

方法中的参数的工作方式类似于变量。 通过指定数据类型后跟参数名称来定义参数。 参数在方法签名中声明,参数的值由方法调用方提供,而不是在方法本身内初始化。 请考虑以下代码:

	CountTo(5);

	void CountTo(int max) 
	{
		for (int i = 0; i < max; i++)
		{
			Console.Write($"{i}, ");
		}
	}

在此示例中,该方法 CountTo 接受名为 max 的整数参数。 参数在方法的 for 循环中引用。 调用时 CountTo ,整数 5 将作为参数提供。

在本练习中,你将了解如何创建和使用自己的方法参数。

准备编码环境

本模块包括指导你完成生成和运行演示代码的过程的动手活动。 建议使用 Visual Studio Code 作为开发环境来完成这些活动。 使用 Visual Studio Code 来完成这些活动将帮助你在供全球专业人员使用的开发人员环境中更舒适地编写和运行代码。

  1. 打开 Visual Studio Code。

    可以使用 Windows“开始”菜单(或等效资源 [对于其他 OS])打开 Visual Studio Code。

  2. 在 Visual Studio Code 的“文件”菜单上,选择“打开文件夹”。

  3. 在“打开文件夹”对话框中,导航到 Windows“桌面”文件夹。

    如果你有不同的用于保存代码项目的文件夹位置,则可以改为使用该文件夹位置。 对于此培训,重要的是使用一个容易定位和记住的位置。

  4. 在“打开文件夹”对话框中,选择“选择文件夹”。

    如果看到一个询问是否信任作者的安全对话框,请选择“是”。

  5. 在 Visual Studio Code 的“终端”菜单上,选择“新终端”。

    请注意,“终端”面板中的命令提示符显示当前文件夹的文件夹路径。 例如:

    C:\Users\someuser\Desktop>
    

    注释

    如果你是在自己的电脑上工作,而不是在沙盒或托管环境中工作,并且已完成此 C# 系列中的其他 Microsoft Learn 模块,则可能已经为代码示例创建了一个项目文件夹。 如果是这种情况,可以跳过下一步,该步骤用于在 TestProject 文件夹中创建控制台应用。

  6. 在终端命令提示符处,若要在指定文件夹中新建控制台应用程序,请键入“dotnet new console -o ./CsharpProjects/TestProject”,然后按 Enter。

    此 .NET CLI 命令使用 .NET 程序模板在指定文件夹位置创建新的 C# 控制台应用程序项目。 该命令会创建 CsharpProjects 和 TestProject 文件夹,并使用 TestProject 作为 .csproj 文件的名称。

  7. 在“资源管理器”面板中,展开“CsharpProjects”文件夹。

    你应会看到 TestProject 文件夹和两个文件,一个名为 Program.cs 的 C# 程序文件和一个名为 TestProject.csproj 的 C# 项目文件。

  8. 在 EXPLORER 面板中,若要在编辑器面板中查看代码文件,选择 Program.cs。

  9. 删除现有代码行。

    在本模块中,你将使用此 C# 控制台项目来创建、生成和运行代码示例。

  10. 关闭“终端”面板。

使用参数创建方法

在此任务中,你将创建一个将计划时间调整为其他 GMT 时区的方法。 该方法应接受时间列表、当前时区和新时区。 让我们开始吧!

  1. 在 Visual Studio Code 编辑器中输入以下代码:

    int[] schedule = {800, 1200, 1600, 2000};
    
  2. 若要使用参数创建方法,请在新的空白行中输入以下代码:

    void DisplayAdjustedTimes(int[] times, int currentGMT, int newGMT) 
    {
    
    }
    

    请注意,参数的声明方式与声明变量的方式类似,使用数据类型后跟变量名称。 可以使用任何数据类型的参数,例如 string,、 boolint数组等! 方法中的多个参数始终以逗号分隔。

  3. DisplayAdjustedTimes 方法中输入以下代码:

    int diff = 0;
    if (Math.Abs(newGMT) > 12 || Math.Abs(currentGMT) > 12)
    {
        Console.WriteLine("Invalid GMT");
    }
    

    请注意,你不必声明变量 newGMTcurrentGMT,因为它们已在方法签名中声明。 你也不会初始化变量,因为该方法假定调用方提供具有已分配值的这些参数。

    在此步骤中,将创建 int diff 存储时间差,然后检查提供的 GMT 值是否介于 -12 和 12 之间。 使用 Math.Abs 可提供数字的绝对值,因此如果 GMT 值大于 12,则其无效。

  4. 若要计算时间差,请按如下所示更新 DisplayAdjustedTimes 方法:

    int diff = 0;
    if (Math.Abs(newGMT) > 12 || Math.Abs(currentGMT) > 12)
    {
        Console.WriteLine("Invalid GMT");
    }
    else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) 
    {
        diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT));
    } 
    else 
    {
        diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT));
    }
    

    在此代码中,检查是否需要添加或减去 GMT 时区的绝对值以获取以小时为单位的差异。 如果 GMT 值共享相同的符号(两个正数或两个负数),则小时差等于两个数字之间的差值。 如果 GMT 值具有相反的符号,则差值等于两个数字的总和。 由于小时以数百表示,因此将结果乘以 100。

  5. 若要显示结果,请在方法末尾 DisplayAdjustedTimes 输入以下代码:

    for (int i = 0; i < times.Length; i++) 
    {
        int newTime = (times[i] + diff) % 2400;
        Console.WriteLine($"{times[i]} -> {newTime}");
    }
    
  6. 若要调用方法,请在变量声明后 int[] schedule 输入以下代码:

    DisplayAdjustedTimes(schedule, 6, -6);
    

    请注意,变量和文本都可以作为参数提供给方法。 通过使用输入参数,该方法不限于使用全局变量的值。

检查你的工作

在此任务中,从集成终端运行应用程序,并验证代码是否正常工作。 让我们开始吧。

  1. 使用 Ctrl + S 或使用 Visual Studio Code 文件菜单保存工作。

  2. 如有必要,打开 Visual Studio Code 的集成终端面板。

    在“EXPLORER”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。

  3. 在终端命令提示符处,输入 dotnet run

  4. 验证代码是否生成以下输出:

    800 -> 2000
    1200 -> 0
    1600 -> 400
    2000 -> 800
    

    如果代码显示不同的结果,则需要查看代码以查找错误并进行更新。 再次运行代码以查看是否已解决问题。 继续更新并运行代码,直到代码生成预期结果。

回顾

下面介绍了到目前为止已了解的参数:

  • 信息可以以参数形式传递给方法。
  • 参数在方法签名中声明。
  • 多个参数用逗号分隔。
  • 方法可以接受变量或文本参数。