练习 - 检查 TryParse() 方法
- 12 分钟
处理数据时,有时需要将字符串数据转换为数字数据类型。 正如上一单元所述,由于字符串数据类型可以保留非数字值,因此将 string 转换为数字数据类型可能导致运行时错误。
例如,以下代码:
string name = "Bob";
Console.WriteLine(int.Parse(name));
会导致以下异常:
System.FormatException: 'Input string was not in a correct format.'
若要避免格式异常,请对目标数据类型使用 TryParse () 方法。
使用 TryParse()
TryParse() 方法可同时执行多项操作:
- 它会尝试将字符串分析成给定的数字数据类型。
- 如果成功,它会将转换后的值存储在 out 参数中,如以下部分所述。
- 它将返回
bool,指示操作是成功还是失败。
可使用布尔返回值对值执行操作,如执行一些计算,或在分析操作失败时显示一条消息。
注意
在此练习中,使用 int 数据类型,但对于所有数字数据类型,均可使用类似的 TryParse() 方法。
输出参数
方法可返回值或返回“void”,后者意味着不返回值。 方法还可以通过 out 参数返回值,这些值的定义与输入参数一样,但包含关键字 out。
使用 TryParse() 将字符串转换为整数
删除或使用行注释运算符
//注释掉前面步骤中的所有代码。在 Visual Studio Code 编辑器中更新代码,如下所示:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }检查此代码行:
if (int.TryParse(value, out result))使用
out参数调用方法时,必须在变量前使用关键字out,以便保存值。out参数被分配给代码result(int.TryParse(value,out result中的)变量。 然后,可以使用变量out在其余代码中使用result参数包含的值。如果
int.TryParse()方法成功地将true变量string转换为value,则它返回int;否则,它返回false。 因此,将该语句置于if语句中,然后相应地执行决策逻辑。转换后的值存储在
int变量result中。 在此代码行之前声明并初始化了int变量result,因此,对于属于 和if语句的代码块,在其内部及外部均可访问该变量。out关键字指示编译器,TryParse()方法不会仅以传统方式返回值(作为返回值),还会通过此双向参数传递输出。运行代码,应看到以下输出:
Measurement: 102
稍后在代码中使用已分析的 int
若要演示前面声明的
result变量由out参数填充,并且稍后还可以在代码中使用,请在 Visual Studio Code 编辑器中更新代码,如下所示:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");在 Visual Studio Code 的“文件”菜单上,选择“保存”。 在生成或运行代码之前,必须保存 Program.cs 文件。
在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。 终端面板应打开,且包含一个命令提示符,显示终端已打开到您的 TestProject 文件夹位置。
在终端命令提示符处,若要运行代码,请键入 dotnet run,然后按 Enter。
注意
如果看到一条指示“找不到要运行的项目”的消息,请确保终端命令提示符显示预期的 TestProject 文件夹位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>应会看到以下输出:
Measurement: 102 Measurement (w/ offset): 152检查上一示例
Console.WriteLine($"Measurement (w/ offset): {50 + result}");中的最后一行代码,因为result变量是在 if 语句之外定义的,所以可以稍后在代码中访问它。
将字符串变量修改为无法分析的值
最后,研究另一种情况 - 故意为 TryParse() 提供不能转换为 int 的错误值。
修改第一行代码,将变量
value重新初始化为其他值。string value = "bad";此外,请修改最后一行代码,先确保结果大于 0,然后再显示第二条消息。
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");整个代码示例现应与以下代码一致:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");保存代码文件,然后使用 Visual Studio Code 运行代码。 你应获得下面的结果:
Unable to report the measurement.检查在上一个示例中添加的最后两个代码行。
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");由于
result是在if语句之外定义的,因此稍后可以在代码块之外的代码中访问result。 因此,在允许将result+ 偏移作为输出写入之前,可以检查result是否有大于零的值。 检查大于零的result值可避免在Unable to report the measurement.消息后打印偏移值。
回顾
TryParse() 方法是一个非常有用的工具。 下面是一些需要记住的便捷提示。
- 将字符串转换为数字数据类型时,请使用
TryParse()。 - 如果转换成功,
TryParse()会返回true;如果失败,则会返回false。 - out 参数提供了返回值的方法的辅助手段。 在这种情况下,
out参数返回转换后的值。 - 向已定义
out形参的方法传递实参时,请使用关键字out。