<div id="module-unit-notification-container" hidden=""></div> <p>有多种方法可以执行数据类型转换。 选择的方法取决于你对两个重要问题的回答:</p>
讯享网
- 对于不同的值,尝试更改值的数据类型是否可能在运行时引发异常?
- 对于不同的值,尝试更改值的数据类型是否可能导致信息丢失?
在此练习中,你将研究这些问题、它们的答案的含义,以及需要更改数据类型时应使用哪种方法。
本模块包括指导你完成生成和运行演示代码的过程的动手活动。 建议使用 Visual Studio Code 作为开发环境来完成这些活动。 使用 Visual Studio Code 来完成这些活动可帮助你在由全球专业人员使用的开发人员环境中更舒适地编写和运行代码。
- 打开 Visual Studio Code。
可以使用 Windows“开始”菜单(或等效资源 [对于其他 OS])打开 Visual Studio Code。
- 在 Visual Studio Code 的“文件”菜单上,选择“打开文件夹”。
- 在“打开文件夹”对话框中,导航到 Windows“桌面”文件夹。
如果你有不同的用于保存代码项目的文件夹位置,则可以改为使用该文件夹位置。 对于此培训,重要的是使用一个容易定位和记住的位置。
- 在“打开文件夹”对话框中,选择“选择文件夹”。
如果看到一个询问是否信任作者的安全对话框,请选择“是”。
- 在 Visual Studio Code 的“终端”菜单上,选择“新终端”。
请注意,“终端”面板中的命令提示符显示当前文件夹的文件夹路径。 例如:
讯享网
- 在终端命令提示符处,若要在指定文件夹中新建控制台应用程序,请键入 ,然后按 Enter。
此 .NET CLI 命令使用 .NET 程序模板在指定文件夹位置创建新的 C# 控制台应用程序项目。 该命令会创建 CsharpProjects 和 TestProject 文件夹,并使用 TestProject 作为 文件的名称。
- 在“资源管理器”面板中,展开“CsharpProjects”文件夹。
你应会看到 TestProject 文件夹和两个文件,一个名为 Program.cs 的 C# 程序文件和一个名为 TestProject.csproj 的 C# 项目文件。
- 在“资源管理器”面板中,若要在“编辑器”面板中查看代码文件,请选择“Program.cs”。
- 删除现有代码行。
在本模块中,请使用此 C# 控制台项目来创建、生成和运行代码示例。
- 关闭“终端”面板。
C# 编译器会尝试适应你的代码,但不会编译可能导致异常的操作。 了解 C# 编译器的主要问题后,你将更容易理解它以特定方式工作的原因。
- 确保已打开 Visual Studio Code,并且“编辑器”面板中显示了 Program.cs。
- 在 Visual Studio Code 编辑器中键入以下代码:
在此,你尝试添加值 和 。 值 的类型为 。 这是否有效?
- 在 Visual Studio Code 的“文件”菜单上,选择“保存”。
在生成或运行代码之前,必须保存 Program.cs 文件。
- 在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。
终端面板应打开,并应包含一个命令提示符,显示终端已打开并转到 TestProject 文件夹位置。
- 在终端命令提示符处,若要运行代码,请键入 ,然后按 Enter。
你应会看到以下类似输出
讯享网
- 请花一点时间考虑编译器无法运行第一个代码示例的原因。
错误消息的重要部分 指示问题与使用 数据类型有关。
但为什么 C# 编译器无法处理该错误? 毕竟,你可以执行反向操作,将数字连接到 ,并将其保存在字符串变量中。 此处,你可以将 变量的数据类型从 更改为 。
- 在 Visual Studio Code 编辑器中更新代码,如下所示:
- 保存代码文件,然后使用 Visual Studio Code 运行代码。
应该会看到以下输出:
讯享网
输出在数学上不正确,但通过将值组合为字符“2”和“4”来完成。
- 再次查看第一个代码示例,其中 变量的类型为 。 包含错误消息的代码。
为什么 C# 编译器不明白你要将包含 的变量 视为数字,而不是 ?
C# 编译器会在操作过程中发现潜在问题。 变量 的类型为 ,因此可能会将其设置为不同的值,如 。 如果 C# 编译器尝试将 转换为数字,则会在运行时引发异常。 为避免这种情况,C# 编译器不会隐式执行从 到 的转换。
从 C# 编译器的角度来看,更安全的操作是将 转换为 并改为执行串联。
如果你的目的是使用字符串执行加法,C# 编译器会要求你对数据转换过程进行更显式的控制。 换言之,它会强制要求你更多地参与其中,这样你就可以采取适当的预防措施来处理转换可能引发异常的可能性。
如果需要将值从原始数据类型更改为新的数据类型,并且更改可能在运行时引发异常,则必须执行数据转换。
若要执行数据转换,你可以使用下列方法之一:
- 对数据类型使用帮助程序方法
- 对变量使用帮助程序方法
- 使用 类的方法
稍后,你将在本单元中了解几个用于数据转换的方法示例。
- 删除或使用行注释运算符 注释掉上一练习步骤中的代码,并添加以下代码:
讯享网
- 保存代码文件,然后使用 Visual Studio Code 运行代码。
应会看到以下输出:
此示例的关键是下面的代码行:
讯享网
由于任何 值都可以轻松地纳入 ,因此编译器会执行转换。
术语“扩大转换”表示你正在尝试将值从一种可以保留较少信息的数据类型转换为一种可保留较多信息的数据类型。 在这种情况下,存储在 类型的变量中的值转换为 类型的变量时不会丢失信息。
如果你了解需要执行扩大转换,则可以依赖于隐式转换。 编译器处理隐式转换。
- 删除或使用行注释运算符 注释掉上一练习步骤中的代码,并添加以下代码:
若要执行强制转换,请使用强制转换运算符 将数据类型括起来,然后将其放在要转换的变量旁边(示例:)。 对定义的强制转换数据类型 () 执行显式转换。
- 保存代码文件,然后使用 Visual Studio Code 运行代码。
应会看到以下输出:
讯享网
此示例的关键是下面的代码行:
变量 保存一个精度在小数点之后的值。 通过添加强制转换指令 ,你告诉编译器 C#,你知道可能发生精度丢失,并且在这种情况下是可以接受的。 你告诉编译器你正在执行有意转换,即显式转换。
术语“收缩转换”表示你试图将值从一种可保存较多信息的数据类型转换为一种可保存较少信息的数据类型。 在这种情况下,你可能会丢失信息,如精度(即小数点后的位数)。 一个示例是将存储在 类型的变量中的值转换为 类型的变量。 如果打印出这两个值,你可能会注意到出现了信息丢失的情况。
如果你了解需要执行收缩转换,则需要执行强制转换。 强制转换是一种针对 C# 编译器的指令,即你知道可能发生精度丢失,但这种情况可以接受。
如果不确定在转换过程中是否会丢失数据,请编写代码以两种不同的方式执行转换,并观察变化。 开发人员经常编写小型测试来更好地了解行为,如下面的示例所示。
- 删除或使用行注释运算符 注释掉上一练习步骤中的代码,并添加以下代码:
讯享网
- 保存代码文件,然后使用 Visual Studio Code 运行代码。
此时会看到与下面类似的输出:
你可以从输出中了解到,将 强制转换为 是收缩转换,因为会丢失精度。
前面指出,值从一种数据类型更改为另一种数据类型可能会导致运行时异常,应执行数据转换。 对于数据转换,可以使用三种技术:
- 对变量使用帮助程序方法
- 对数据类型使用帮助程序方法
- 使用 类的方法
每个数据类型变量都具有 方法。 方法的作用取决于它在给定类型上的实现方式。 但在大多数基元中,该方法执行扩大转换。 尽管这并不是绝对必要的(因为在大多数情况下你可以依赖于隐式转换),但它可以向其他开发人员传递这样的信息,即你了解正在执行的操作,并且是有意为之的。
下面是使用 方法将 值显式转换为 的简单示例。
- 删除或使用行注释运算符 注释掉上一练习步骤中的代码,并添加以下代码:
讯享网
- 保存代码文件,然后使用 Visual Studio Code 运行代码。 运行代码时,输出应显示两个值的串联:
大部分数字数据类型都具有 方法,可将字符串转换为给定的数据类型。 在这种情况下,你使用 方法将两个字符串转换为 值,然后将二者相加。
- 删除或使用行注释运算符 注释掉上一练习步骤中的代码,并添加以下代码:
讯享网
- 保存代码文件,然后使用 Visual Studio Code 运行代码。 在运行代码时,输出应显示两个值的和:
- 请花一点时间尝试找出前面的代码示例存在的潜在问题? 如果将 或 变量设置为无法转换为 的值,会发生什么情况呢? 在运行时引发异常。 C# 编译器和运行时要求你提前计划并防止“非法”转换。 可以通过多种方式缓解运行时异常。
缓解此情况最简单的方法是使用 ,它是比 方法更好的版本。
类有许多可用于将值从一种类型转换为另一种类型的帮助程序方法。 在下面的代码示例中,你将两个字符串转换为 类型的值。
- 删除或使用行注释运算符 注释掉上一练习步骤中的代码,并添加以下代码:
讯享网
- 保存代码文件,然后使用 Visual Studio Code 运行代码。
应会看到以下输出:
方法具有 19 个重载版本,这让它能够接受几乎所有的数据类型。
你在此处将 方法与字符串一起使用,但应该尽可能使用 。
那么,在什么情况下你应该使用 类? 类非常适用于将小数数字转换为整数 (),因为它按预期方式向上舍入。
下面的示例演示如果尝试以收缩转换方式将 强制转换为 ,而不是使用 方法将该 转换为 ,会发生什么情况。
- 删除或使用行注释运算符 注释掉上一练习步骤中的代码,并添加以下代码:
讯享网
- 保存代码文件,然后使用 Visual Studio Code 运行代码。
应会看到以下输出:
强制转换 时,系统会截断浮点数的值,因此结果是 ,这意味着完全忽略小数后的值。 你可以将文本浮点数更改为 ,强制转换的结果也是相同的。
使用 进行转换时,文本浮点数值将正确地向上舍入到 。 如果你将文本值更改为 ,则会向下舍入到 。
你了解了有关数据转换和强制转换的多个重要概念:
- 防止执行数据转换时出现运行时错误
- 执行显式强制转换,告诉编译器你了解存在丢失数据的风险
- 执行扩大转换时,依靠编译器执行隐式转换
- 使用 强制转换运算符和数据类型执行强制转换(例如 )
- 如果要执行收缩转换,但要执行舍入,而不是信息截断,请使用 类

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/186773.html