C# 入门:用 TryParse 校验时长并保留合法零值
在控制台项目中解析分钟数,组合 TryParse 和范围检查,以可空整数表示失败,避免异常与合法零混在一起。
本节目标
在控制台项目中解析分钟数,组合 TryParse 和范围检查,以可空整数表示失败,避免异常与合法零混在一起。
环境与运行方法
准备 .NET 8 SDK,创建目录后执行 dotnet new console --framework net8.0。用示例替换 Program.cs,执行 dotnet run。这里使用顶层语句,不要再套入另一份 Main。
核心思路
TryParse 通过布尔返回值报告格式是否正确,并在 out 参数提供结果。解析失败时 out 也可能是零,所以必须检查返回值。本例再限制 0 到 1440,最终用 int? 表达业务结果。
完整示例
static int? Minutes(string text)
{
if (!int.TryParse(text, out int value) || value < 0 || value > 1440)
return null;
return value;
}
foreach (string text in new[] { "30", "0", "x", "1441" })
{
int? result = Minutes(text);
Console.WriteLine(result.HasValue ? "ok=" + result.Value : "invalid");
}预期输出
ok=30
ok=0
invalid
invalid逐步理解
短路或运算让解析失败立即进入返回 null 的分支。调用者使用 HasValue 判断存在性,再访问 Value。零具有值,不会被误认为失败。
TryParse 接受的文本规则由重载、文化设置与数字样式决定。这里的普通整数足以演示流程,如果处理来自固定协议的格式,应指定文化与样式,并增加空白、符号等测试。可空类型不负责验证上限,业务判断仍由函数承担。
常见问题与边界
- 不应只看 out 的数值判断成功。
- Value 在无值时访问会失败。
- 能解析为 int 不代表符合业务范围。
动手练习
增加 "1440"、"-1" 和空字符串。
参考答案
1440 合法,负数和空文本返回 null。三个边界帮助检查上限、下限和格式分支是否都被覆盖。
文章回复
0 条公开回复