C#调用Substring方法报ArgumentOutOfRangeException异常求助
C# Substring参数错误引发ArgumentOutOfRangeException排查
错误原因
你出现报错的核心原因是对C#的Substring方法参数理解错误:
- C#中
Substring(int startIndex, int length)的第二个参数是需要截取的子串长度,不是子串的结束索引。 - 你的输入字符串
"12:01:00PM"总长度只有10(索引范围0~9),你写的s.Substring(6, 8)要求从索引6开始截取8个字符,总位置要到索引13,远超字符串本身的长度,直接触发了参数越界异常。后续的s.Substring(8,10)也存在相同的问题。
解决方法
方案1:修正Substring参数
按照你原有的硬编码拆分逻辑,调整每一步的截取长度即可:
static List<string> strToList(string s) { // input = 00:00:00AM // 0123456789 List<string> a = new List<string> { }; a.Add(s.Substring(0, 2)); //hh [0] 长度2 a.Add(s.Substring(3, 2)); //mm [1] 长度2 a.Add(s.Substring(6, 2)); //ss [2] 长度2 a.Add(s.Substring(8, 2)); //am [3] 长度2 return a; } string s = "12:01:00PM"; List<string> a = strToList(s); foreach (var x in a) { Console.WriteLine(x); }
方案2:使用时间解析(更稳妥)
硬编码索引的方式对输入格式要求极高,只要字符串格式稍有变化就会报错,推荐用C#内置的时间解析方法实现需求,鲁棒性更高:
static List<string> strToList(string s) { // 按照输入格式hh:mm:sstt解析时间 DateTime time = DateTime.ParseExact(s, "hh:mm:sstt", System.Globalization.CultureInfo.InvariantCulture); return new List<string> { time.ToString("hh"), time.ToString("mm"), time.ToString("ss"), time.ToString("tt") }; }
内容的提问来源于stack exchange,提问作者qternel
相关产品推荐
相关产品推荐

