Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理这个ArgumentOutofRangeException?_C#_Winforms_List_Listview - Fatal编程技术网

C# 如何处理这个ArgumentOutofRangeException?

C# 如何处理这个ArgumentOutofRangeException?,c#,winforms,list,listview,C#,Winforms,List,Listview,我正在尝试制作一个程序,读取一个包含50个随机单词的文件,它将包含3个或更少字母的单词存储在一个名为SmallWords的列表中,将包含4个或更多字母的单词存储在一个名为LargeWords的列表中。我使用的是Windows窗体,我有一个包含两列的ListView控件“小词”和“大词”。很明显,我想做的就是把这些词放在相应的栏中。问题是这个文件没有25个小单词和25个大单词,你知道吗?可能它有30个小词和20个大词,所以当我循环向ListView添加项目时,它会抛出以下异常: ArgumentO

我正在尝试制作一个程序,读取一个包含50个随机单词的文件,它将包含3个或更少字母的单词存储在一个名为SmallWords的列表中,将包含4个或更多字母的单词存储在一个名为LargeWords的列表中。我使用的是Windows窗体,我有一个包含两列的ListView控件“小词”和“大词”。很明显,我想做的就是把这些词放在相应的栏中。问题是这个文件没有25个小单词和25个大单词,你知道吗?可能它有30个小词和20个大词,所以当我循环向ListView添加项目时,它会抛出以下异常:

ArgumentOutOfRange异常

这是我的密码

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);
}
var MaxNum=Math.Max(SmallWords.Count,LargeWords.Count);
对于(var index=0;index
在这一行
item.SubItems.Add(LargeWords[index])抛出异常

有办法解决这个问题吗?还是想用另一种方式将项目添加到列中?我知道它是有效的,因为如果更改
Math.Max(…)
Math.Min(…)
它添加了单词,但只有20个大词和20个小词,我将在SmallWords列中缺少10个小词


谢谢

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

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

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);
}
var MaxNum=Math.Min(SmallWords.Count,LargeWords.Count);
//^---将最大值更改为最小值
对于(var index=0;index
我认为你应该用另一种方式看待这个问题。基本上,您是在
i
索引中将一个大词添加到同一索引中的一个小词。这意味着您必须有一个小词才能将一个大词添加为子项。忘记查找最小值或最大值,只需循环计算小单词的数量,仅在索引在范围内时添加大单词:

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);
}
(var index=0;indexfor { ListViewItem=新的ListViewItem(SmallWords[索引]); 如果(索引