练习 - 使用隐式数据转换执行加法

已完成

通常需要在数值数据上执行数学运算。 首先从本单元的加法开始,并在下一个单元中扩展到其他运算,因为要学习重要的一课来了解 C# 编译器如何分析和解释代码。

添加两个数值数据

若要将两个数字相加,请使用加法运算符,即加号 +。 没错,字符串串联使用的相同的加号 + 也用于加法。 为了多个目的重复使用一个符号有时被称为“重载运算符”,并且经常在 C# 中发生。

在此示例中,C# 编译器了解你要执行的操作。 编译器会分析你的代码,看 +(运算符)前后是否有两个数值(操作数)。 给定变量的数据类型(两个都是 int),它会理解你想将这两个值相加。

  1. 在 .NET 编辑器中输入以下代码:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. 运行代码,输出控制台中会显示以下结果:

    19
    

混合数据类型以强制执行隐式类型转换

如果尝试对 +string 值使用 int 符号会发生什么呢?

  1. 修改编写的代码以匹配以下代码:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. 运行代码,输出控制台中会显示以下结果:

    Bob sold 7 widgets.
    

在这种情况下,C# 编译器了解你想使用 + 符号来连接两个操作数。 它推断出此情况,因为 + 符号由 stringint 数据类型的操作数包围。 因此,它会尝试将 int 变量 widgetsSold 暂时转换为 string 以便将其与字符串的其余部分连接。 C# 编译器会尽力帮助你,但在理想情况下,你应该明确自己的意图。

尝试添加数字和连接字符串的更高级情况

  1. 修改编写的代码以匹配以下代码:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. 运行代码,输出控制台中会显示以下结果:

    Bob sold 77 widgets.
    

编译器将所有内容视为字符串并将其全部连接起来,而不是将 int 变量 widgetsSold 添加到文本 int7 中。

添加括号向编译器阐明意图

  1. 修改编写的代码以匹配以下代码:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. 运行代码,输出控制台中会显示以下结果:

    Bob sold 14 widgets.
    

括号符号 () 变成另一个重载运算符。 在这种情况下,左括号和右括号构成运算符运算的顺序,就如你可以在数学公式中使用的那样。 你指出希望首先解析内部括号,结果是 intwidgetsSold 和值 7 相加。 解析该内容后,它将会隐式转换结果为字符串,以便可与消息的其余部分连接。

备注

应避免在单个代码行中同时执行计算和串联。 此处的重点是帮助你了解如何按编译器的方式查看运算符和操作数。

概括

以下是到目前为止你学习到的关于 C# 中的数学运算的知识:

  • 可以对数字执行类似数学的加法运算。
  • 字符串串联和加法均使用加号 +。 这称为“重载运算符”,编译器根据其运算的数据类型推断合理的使用。
  • 如果 C# 编译器意识到开发者试图连接数字的字符串表示形式来实现演示,则它会隐式将 int 转换为 string
  • 可以使用括号定义运算顺序,以显式指示编译器你要在执行其他运算之前执行特定运算。