DevCN
菜单
全部文章快讯开发深度热点

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。三个边界帮助检查上限、下限和格式分支是否都被覆盖。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。