防止控制台读取时的类型转换异常

大萱姑娘_6364

大萱姑娘_6364

2026-05-07

540人浏览

原创

控制台输入易因类型转换异常崩溃,主因是console.readline()只返回字符串而直接用parse强转;应优先用tryparse替代parse,并对日期用tryparseexact指定格式,同时trim清理空白、规范分隔符,对象转型时用as或is避免invalidcastexception。

防止控制台读取时的类型转换异常

控制台读取用户输入时最容易出现类型转换异常,根本原因在于 Console.ReadLine() 只返回字符串,而后续直接用 int.Parse()、DateTime.Parse() 等方法强转,一旦用户输错格式(如输字母代替数字、输“2026/04/15”而非“2026-04-15”),程序立刻崩溃。

优先用 TryParse 替代 Parse

这是最直接有效的预防手段。TryParse 不抛异常,而是返回 bool 值表示是否转换成功,并通过 out 参数输出结果。

  • ✅ 推荐写法:
    string input = Console.ReadLine();<br>if (int.TryParse(input, out int year))<br>{<br>    // year 已是有效整数,可安全使用<br>    Console.WriteLine($"{year} 是闰年吗?" + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)));<br>}<br>else<br>{<br>    Console.WriteLine("请输入一个有效的年份(纯数字)");<br>}
  • ❌ 避免写法:
    int year = int.Parse(Console.ReadLine()); // 用户输"a"就直接报 FormatException

对日期等复杂类型做格式预校验

日期字符串格式多变(“2026-04-15”、“2026/04/15”、“15-Apr-2026”),单纯靠 TryParse(DateTime) 容易失败或误判。建议明确约定格式,并用带格式的 TryParseExact。

  • 指定一种输入格式,比如只接受 yyyy-MM-dd:
    string dateStr = Console.ReadLine();<br>if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd", null, DateTimeStyles.None, out DateTime dt))<br>{<br>    Console.WriteLine($"解析成功:{dt:yyyy年MM月dd日}");<br>}<br>else<br>{<br>    Console.WriteLine("日期格式错误,请输入如 2026-04-15");<br>}
  • 支持多种格式时,传入字符串数组:
    string[] formats = { "yyyy-MM-dd", "yyyy/MM/dd", "dd-MM-yyyy" };<br>DateTime.TryParseExact(input, formats, null, DateTimeStyles.None, out dt);

提前清理和规范化输入

用户可能无意中输入空格、制表符甚至全角字符。不处理这些干扰,即使内容正确也可能导致 TryParse 失败。

  • 用 Trim() 去首尾空白:
    string input = Console.ReadLine()?.Trim();
  • 对数字类输入,可进一步过滤非数字字符(谨慎使用,仅限纯数字场景):
    string cleanInput = new string(input.Where(char.IsDigit).ToArray());
  • 对日期类输入,可替换常见分隔符为统一符号:
    input = input.Replace('/', '-').Replace('.', '-');

结合类型检查与安全转换(针对对象引用)

如果从控制台读取的是序列化数据(如 JSON 字符串),再反序列化为对象,后续又需转型(如 object → Person),此时要防 InvalidCastException。

  • 不用 (Person)obj,改用 as 操作符:
    Person p = obj as Person;<br>if (p != null)<br>{<br>    // 安全使用 p<br>}
  • 或用 is 判断后再转:
    if (obj is Person person)<br>{<br>    // person 已是 Person 类型,无需再 cast<br>}
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++类型转换方式
C++类型转换方式

本专题整合了C++类型转换相关内容,想了解更多相关内容,请阅读专题下面的文章。

2025.07.15

2242

23

剧云AI短剧创作教程合集
剧云AI短剧创作教程合集

本专题聚焦剧云AI短剧创作,讲解从短剧灵感、梗概、全局大纲到分集、分场和正文的完整流程及节奏设计方法。

2026.10.14

0

15

剧云AI剧本创作零基础入门
剧云AI剧本创作零基础入门

本专题系统讲解剧云AI剧本创作流程,涵盖灵感、梗概、大纲、分场与正文生成,帮助新手快速完成首个中文剧本项目。

2026.10.14

0

14

VibeKnow文档转视频操作指南
VibeKnow文档转视频操作指南

本专题讲解VibeKnow上传Word、TXT、Markdown等材料生成视频的方法,覆盖内容解析、脚本组织、画面生成与成片检查。

2026.10.14

0

15

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

2026.10.14

0

13

二狗PPT大纲编辑实操指南
二狗PPT大纲编辑实操指南

本专题聚焦二狗PPT结构化大纲的生成和修改,讲解标题、正文、目录、页数与页面顺序的调整方法,提升汇报逻辑和内容完整性。

2026.10.14

0

15

二狗PPT文档转PPT全教程
二狗PPT文档转PPT全教程

本专题讲解二狗PPT解析Word、PDF、Excel和PPT资料的方法,涵盖文件上传、内容提取、大纲整理、异常处理与转换后校对。

2026.10.14

0

13

讯飞绘文全功能使用教程
讯飞绘文全功能使用教程

本专题系统整理讯飞绘文官网入口、注册登录、工作台及内容创作流程,帮助用户熟悉常用功能,快速完成首篇图文内容。

2026.10.14

0

14

讯飞绘文AI写作与文案生成合集
讯飞绘文AI写作与文案生成合集

本专题聚焦讯飞绘文AI写作、提纲生成、文章改写和文案润色,覆盖从主题输入到成稿优化的关键操作与实用技巧。

2026.10.14

0

14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习