![](/img/trans.png)
[英]C# System.ArgumentOutOfRangeException:Index was out of range
[英]c# - ArgumentOutOfRangeException: Index was out of range - 2 Forms
问题解决了。
原始的“私有无效buttonSave_Click”已更改为:
private void buttonSave_Click(object sender, EventArgs e)
{
if (MusicCollection.FormMain.PublicVars.AlbumList.Count != 100)
{
MusicCollection.FormMain.PublicVars.AlbumList.Add(new Album(NameTextBox.Text));
MessageBox.Show("New Album added: " + NameTextBox.Text);
formMain.ListAlbums(formMain.AlbumsListBox.Items);
this.Close();
}
else
{
MessageBox.Show("No room for new album.");
this.Close();
}
}
原始帖子:
我是使用C#的新手,因此对于任何看似明显的错误或糟糕的编码来说,它都是应用程序。
我试图创建一个新的相册对象(从FormFormAlbumAC上的NameTextBox.Text获取其名称),并在用户单击FormAlbumAC上的保存按钮时将其添加到List AlbumList。 然后,我想在FormFormMain的列表框中列出所有AlbumList。
当我运行程序并单击“保存”按钮时,在以下行出现错误“未处理ArgumentOutOfRangeException,索引超出范围”:
if (MusicCollection.FormMain.PublicVars.AlbumList[i] == null)
// line 8 on my excerpt from Form FormAblumAC
我不确定自己在做什么错。 任何帮助将不胜感激,谢谢。
表格FormMain:
public const int MAX_ALBUMS = 100;
public int totalAlbums = 0;
public FormMain()
{
InitializeComponent();
}
public static class PublicVars
{
public static List<Album> AlbumList { get; set; }
static PublicVars()
{
AlbumList = new List<Album>(MAX_ALBUMS);
}
}
public ListBox AlbumListBox
{
get
{
return AlbumListBox;
}
}
public void ListAlbums(IList list)
{
list.Clear();
foreach (var album in PublicVars.AlbumList)
{
if (album == null)
continue;
list.Add(album.Name);
}
}
表格FormAlbumAC:
private FormMain formMain;
private void buttonSave_Click(object sender, EventArgs e)
{
int index = -1;
for (int i = 0; i < MusicCollection.FormMain.MAX_ALBUMS; ++i)
{
if (MusicCollection.FormMain.PublicVars.AlbumList[i] == null)
{
index = i;
break;
}
}
if (index != -1)
{
MusicCollection.FormMain.PublicVars.AlbumList[index] = new Album(NameTextBox.Text);
++formMain.totalAlbums;
MessageBox.Show("New Album added: " + NameTextBox.Text);
formMain.ListAlbums(formMain.AlbumsListBox.Items);
this.Close();
}
else
{
MessageBox.Show("No room for new album.");
this.Close();
}
}
您的问题(根据您的评论)是您的for循环条件不正确。 您的for循环是这样的:
for (int i = 0; i < MusicCollection.FormMain.MAX_ALBUMS; ++i)
这里有一个问题和一个潜在的问题。 首先,当此代码实际运行时,它实际上正在运行:
for (int i = 0; i < 100; ++i)
因为MusicCollection.FormMain.MAX_ALBUMS
声明为100。当MusicCollection.FormMain.PublicVars.AlbumList
的长度小于100时,这会导致错误,因为您试图获取不存在的索引。
相反,您需要从i=0
迭代到....PublicVars.AlbumList-1
的长度,或者最好是for(int i = 0; i < ....PublicVars.AlbumList.Count; i++)
。
第二个潜在的问题是您可能会跳过索引0。数组从索引0开始并继续到length-1
。 因此,您可能需要i++
而不是++i
。 但是,取决于您的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.