我已经半夜了,仍然试图弄清楚这个空例外。我已经阅读了一些关于这个问题的文章,但没有一个对我有任何帮助,对我来说问题是什么应该有效:/它只是在这段代码崩溃了:
Private void UpdateGUI()
{
string selectedItem = cmbDisplayOptions.Items[cmbDisplayOptions.SelectedIndex].ToString();
rdbtReserv.Checked = true;
lstReservations.Items.Clear();
lstReservations.Items.AddRange(m_seatMngr.GetSeatInfoStrings(selectedItem));
}
lstReservations.Items.AddRange(m_seatMngr.GetSeatInfoStrings(selectedItem));
给我ArgumentNullExeption,但对我来说不应该这样做。
addrange将字符串selectedItem发送到另一个类:
public string[] GetSeatInfoStrings(string selectedItem)
{
int count = GetNumOfSeats(selectedItem);
if (count <= 0)
{
return null;
}
string[] strSeatInfoStrings = new string[count];
for (int index = 0; index <= m_totNumOfSeats - 1; index++)
{
strSeatInfoStrings[index] = GetSeatInfoAt(index);
}
return strSeatInfoStrings;
}
此int count = GetNumOfSeats(selectedItem);
转到此处并返回int:
private int GetNumOfSeats(string selectedItem)
{
if (selectedItem == "ReservedSeats")
{
return GetNumReserved();
}
if (selectedItem == "VacantSeats")
{
return GetNumVacant();
}
else
{
return m_totNumOfSeats;
}
}
我已经检查过arrayed有正确的空格数(60)并且selectedItem
有一个字符串(Allseats开头所以它应该返回m_totnumOfSeats
这是一个60的int)但是那么在private int GetNumOfSeats
出现问题,它返回null并且......为什么?
我看不出问题..试图找到问题可能会失明。总是得到很好的帮助,我已经学到了很多!所以也许有人可以指出我的代码中存在的所有问题。
预先感谢一百万人提出任何建议!
//此致
答案 0 :(得分:3)
查看ObjectCollection的源代码,当您调用AddRange并传递空值时,将返回ArgumentNullException。
您可以阻止此更改此代码
if (count <= 0)
{
return new string[0];
}
答案 1 :(得分:3)
检查您的变量是否实际初始化并返回正确的值。
GetSeatInfoStrings方法和GetNumofSeats方法中存在逻辑错误。
幸运的是,GetNumOfSeats方法将始终为您返回60,因为您比较字符串的方式有误。这不是正确的方法,所以使用Equals方法进行比较,如
if (selectedItem.Equals("ReservedSeats"))
通过这种方式,您将获得GetNumOfSeats(string)方法的正确输出。
接下来就是在GetSeatInfoStrings方法中修复循环,以便不会像这样得到数组索引超出范围的异常。
string[] strSeatInfoStrings = new string[count];
for (int index = 0; index <= count; index++)
{
strSeatInfoStrings[index] = GetSeatInfoAt(index);
}
return strSeatInfoStrings;
还要修复GetSeatInfoStrings方法中逻辑返回null的部分。它应该根据你的逻辑
返回一个空字符串数组 return new string[0];
这应该可以使你的方法有效。在调试它之前,你需要非常小心你的代码:-)