【问题标题】:Unexpected ArgumentOutOfRangeException意外的参数OutOfRangeException
【发布时间】:2019-06-04 20:17:22
【问题描述】:

当我尝试从 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(); 对 ListDateTime> 执行此操作,但这也不起作用。

【问题讨论】:

  • 它们不在范围内。简单的。遇到此异常时stringDate 的值是多少?
  • 使用DatumPocetka[i].Year
  • ...I'm pretty sure the arguments are in range 知识的幻觉是一件危险的事情。调试您的代码,以确定发生了什么以及在哪里出了问题:Navigating through Code using the Step Debugger
  • 问题:您是否预先填写了 ArrayList 或 List?我怀疑有 0 个元素,所以您正在尝试使用超出范围的索引。当与数组一起使用时,您演示的代码对我来说效果很好。
  • 参见“它如何应用于 List?”下的 this answer

标签: c# list arraylist


【解决方案1】:

这段代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2021-12-02
    • 1970-01-01
    • 2012-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多