练习 - 使用隐式数据转换执行加法
通常需要在数值数据上执行数学运算。 首先从本单元的加法开始,并在下一个单元中扩展到其他运算,因为要学习重要的一课来了解 C# 编译器如何分析和解释代码。
添加两个数值数据
若要将两个数字相加,请使用加法运算符,即加号 +
。 没错,字符串串联使用的相同的加号 +
也用于加法。 为了多个目的重复使用一个符号有时被称为“重载运算符”,并且经常在 C# 中发生。
在此示例中,C# 编译器了解你要执行的操作。 编译器会分析你的代码,看 +
(运算符)前后是否有两个数值(操作数)。 给定变量的数据类型(两个都是 int
),它会理解你想将这两个值相加。
在 .NET 编辑器中输入以下代码:
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
运行代码,输出控制台中会显示以下结果:
19
混合数据类型以强制执行隐式类型转换
如果尝试对 +
和 string
值使用 int
符号会发生什么呢?
修改编写的代码以匹配以下代码:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
运行代码,输出控制台中会显示以下结果:
Bob sold 7 widgets.
在这种情况下,C# 编译器了解你想使用 +
符号来连接两个操作数。 它推断出此情况,因为 +
符号由 string
和 int
数据类型的操作数包围。 因此,它会尝试将 int
变量 widgetsSold
暂时转换为 string
以便将其与字符串的其余部分连接。 C# 编译器会尽力帮助你,但在理想情况下,你应该明确自己的意图。
尝试添加数字和连接字符串的更高级情况
修改编写的代码以匹配以下代码:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
运行代码,输出控制台中会显示以下结果:
Bob sold 77 widgets.
编译器将所有内容视为字符串并将其全部连接起来,而不是将 int
变量 widgetsSold
添加到文本 int
7
中。
添加括号向编译器阐明意图
修改编写的代码以匹配以下代码:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
运行代码,输出控制台中会显示以下结果:
Bob sold 14 widgets.
括号符号 ()
变成另一个重载运算符。 在这种情况下,左括号和右括号构成运算符运算的顺序,就如你可以在数学公式中使用的那样。 你指出希望首先解析内部括号,结果是 int
值 widgetsSold
和值 7
相加。 解析该内容后,它将会隐式转换结果为字符串,以便可与消息的其余部分连接。
备注
应避免在单个代码行中同时执行计算和串联。 此处的重点是帮助你了解如何按编译器的方式查看运算符和操作数。
概括
以下是到目前为止你学习到的关于 C# 中的数学运算的知识:
- 可以对数字执行类似数学的加法运算。
- 字符串串联和加法均使用加号
+
。 这称为“重载运算符”,编译器根据其运算的数据类型推断合理的使用。 - 如果 C# 编译器意识到开发者试图连接数字的字符串表示形式来实现演示,则它会隐式将
int
转换为string
。 - 可以使用括号定义运算顺序,以显式指示编译器你要在执行其他运算之前执行特定运算。