简单的加法和隐式数据转换
两个数值数据相加
若要将两个数字相加,我们将使用加法运算符,其为加号 +。没错,字符串串联使用的加号 + 也是加法所使用的加号。为了多个目的重复使用一个符号有时被称为“重载运算符”,并且经常在 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# 编译器会尽力帮助你,但在理想情况下,你应该明确自己的意图。
备注
将一种数据类型转换为另一种数据类型的情况还有很多。 在 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# 编译器意识到开发者试图连接数字的字符串表示形式来实现演示,则它会隐式将
int转换为string。 - 可以使用括号定义运算顺序,以显式指示编译器你要在执行其他运算之前执行特定运算。