意外的ArgumentOutOfRangeException

时间:2019-01-10 00:55:02

标签: c# list arraylist

当我尝试从DateTime格式的字符串(“ mm / dd / yyyy hh:mm:ss xx” )并将其分配给List / 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,但是我仍然在DPGodina[i] = stringDate.Substring(stringDate.Length - 16, 4);行上看到ArgumentOutOfRangeException。

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

1 个答案:

答案 0 :(得分:2)

此代码:

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变量声明。