You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:06:05