【问题标题】:How to handle this ArgumentOutOfRangexception?如何处理这个 ArgumentOutOfRang 异常?
【发布时间】:2018-03-12 13:44:26
【问题描述】:

我正在尝试编写一个程序来读取包含 50 个随机单词的文件,它将包含 3 个或更少字母的单词存储在名为 SmallWords 的列表中,将包含 4 个或更多字母的单词存储在名为 LargeWords 的列表中。我正在使用 Windows 窗体,我有一个包含 2 列的 ListView 控件......“小字”和“大字”。很明显,我想做的只是将单词放在相应的列中。问题是文件没有 25 个小字和 25 个大字,你知道吗?也许它有 30 个小字和 20 个大字,所以当我执行此循环将项目添加到 ListView 时,它会抛出此异常:

ArgumentOutOfRangeException。

这是我的代码

var MaxNum = Math.Max(SmallWords.Count, LargeWords.Count);

for (var index = 0; index < MaxNum; index++)
{
     ListViewItem item = new ListViewItem(SmallWords[index]);
     item.SubItems.Add(LargeWords[index]);
     listView1.Items.Add(item);
}

在这一行抛出异常item.SubItems.Add(LargeWords[index]);

有没有办法解决这个问题?或者喜欢另一种将项目添加到列的方式?我知道它有效,因为如果将 Math.Max(...); 更改为 Math.Min(...) 它会添加单词,但只添加 20 个大词和 20 个小词,我将在 SmallWords 列中丢失 10 个小词。

谢谢

【问题讨论】:

    标签: c# winforms list listview


    【解决方案1】:

    您有两个长度不同的数组,并尝试循环访问并访问两个数组的最大值。那永远行不通。一旦你达到了较小数组的限制,你就会得到超出范围的异常。

    修复的两个选项取决于您想要做什么。您可以循环到较小数组的最大值,也可以在达到最大值后跳过处理较小数组的部分。

    var MaxNum = Math.Min(SmallWords.Count, LargeWords.Count);
                //    ^---  Changed Max to Min
    
    for (var index = 0; index < MaxNum; index++)
    {
         ListViewItem item = new ListViewItem(SmallWords[index]);
         item.SubItems.Add(LargeWords[index]);
         listView1.Items.Add(item);
    }
    

    【讨论】:

      【解决方案2】:

      我认为您应该以不同的方式看待这个问题。基本上,您将i 索引处的大词添加到同一索引处的小词。这意味着您必须拥有 SmallWord 才能将 LargeWord 添加为子项。忘记寻找最小值或最大值,只需遍历 SmallWords 的计数,如果索引在范围内,则仅添加 LargeWords:

      for (var index = 0; index < SmallWords.Length; index++)
      {
          ListViewItem item = new ListViewItem(SmallWords[index]);
          if(index < LargeWords.Length)
          {
              item.SubItems.Add(LargeWords[index]);
          }
          listView1.Items.Add(item);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 2020-09-01
        • 2021-04-01
        • 1970-01-01
        相关资源
        最近更新 更多