首页 > 解决方案 > 意外的参数OutOfRangeException

问题描述

当我尝试从 DateTime 格式 ( "mm/dd/yyyy hh:mm:ss xx" ) 的字符串中提取一年并将其分配给List/时,我收到 System.ArgumentOutOfRangeException 错误消息ArrayList

        for(int i = 0; i < elementCounter; i++)
        {
            String stringDate = Convert.ToString(DatumPocetka[i]);
            DPGodina[i] = stringDate.Substring(stringDate.Length - 16, 4);
        }

DatumPocetka 是一个具有字符串类型值的 ArrayList,它是我前面提到的 DateTime 格式。

不过,我必须从字符串的后面计算起始字符。当我从头开始计算时,我不知道年份开始的索引,因为天数和月份可以是个位数和两位数。从后面计算它更容易,因为字符串的时间部分保持静态。( "mm/dd/ yyyy hh:mm:ss xx " ) 这部分字符串总是有 16 个字符,所以这就是我将长度减去 16 的原因。

甚至 Visual Studio 都说 stringDate.Length 等于 21,但我仍然得到 ArgumentOutOfRangeException 就DPGodina[i] = stringDate.Substring(stringDate.Length - 16, 4);行了。

我尝试使用name.Year.ToString();对 List< DateTime >执行此操作;但这也不起作用。

标签: c#listarraylist

解决方案


这段代码:

for(int i = 0; i < elementCounter; i++)
{
    String stringDate = Convert.ToString(DatumPocetka[i]);
    DPGodina[i] = stringDate.Substring(stringDate.Length - 16, 4);
}

可以替换为:

var DPGodina = DatumPocetka.Select(z => z.Year.ToString()).ToList();

如果您想完全删除循环。这也将避免担心字符串解析和循环/列表索引问题。

您还需要删除现有的DPGodina变量声明。


推荐阅读