将列表分配给列表框时,对象引用未设置为对象例外的实例
本文关键字:列表 对象 实例 设置 对象引用 分配 | 更新日期: 2023-09-27 18:35:05
我编写了以下方法来加载一个列表框,其中包含尚未加载的值,但是在分配以下内容时,我得到的对象引用未设置为对象异常的实例。任何信息都会有所帮助。谢谢。
lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());
// Defined outside a method
List<string> cabinetsCurrentNotUsed;
// Set value in the constructor
cabinetsCurrentNotUsed = new List<string>();
这是整个过程。
private void selectCabinetToAdd()
{
// Loop through all server and form cabinet types to see if there are matches
for (int x = 0; x < opticalFile.serverCabinetNames.Count; x++)
{
bool cabinetExists = false;
for (int i = 0; i < opticalFile.CabinetValues.Count; i++)
{
if (opticalFile.serverCabinetNames[x].ToString() == opticalFile.CabinetValues[i].ToString())
{
cabinetExists = true;
}
}
// Add cabinets not used to cabinetsCurrentNotUsed List
if (!cabinetExists)
{
cabinetsCurrentNotUsed.Add(opticalFile.serverCabinetNames[x].ToString());
}
}
// Send cabinetsCurrentNotUsed List to list box
for (int i = 0; i < cabinetsCurrentNotUsed.Count; i++)
{
lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());
}
}
您正在尝试向列表框添加空值。
本能
for (int i = 0; i < cabinetsCurrentNotUsed.Count; i++)
{
lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());
}
用
foreach (string s in cabinetsCurrentNotUsed)
{
if(s != null)
lbxCabinetName.Items.Add(s);
}
注意
这部分与问题无关。但是在设置cabinetExists = true;
后在你的内部 for 循环中,你可以突破内部循环(如果至少满足一个条件,你可以确保 cabinetExists 是真的。 你不必检查内循环中的其余项目)
编辑
private void selectCabinetToAdd()
{
foreach (string sc in serverCabinetNames)
{
bool cabinetExists = false;
foreach (string cv in CabinetValues)
{
if (sc == cv)
{
cabinetExists = true;
break;
}
}
if (!cabinetExists)
{
cabinetsCurrentNotUsed.Add(sc);
}
}
foreach (string ccnu in cabinetsCurrentNotUsed)
{
if (ccnu != null)
lbxCabinetName.Items.Add(ccnu);
}
}
此外,如果列表框可以为 null,请确保在填充列表框之前先检查该复选框。
if(lbxCabinetName != null)
{
selectCabinetToAdd();
}
编辑 2
动态添加控件
ListBox lbxCabinetName = new ListBox();
lbxCabinetName.Location = new System.Drawing.Point(10, 55);
lbxCabinetName.Size = new System.Drawing.Size(130, 95);
this.Controls.Add(lbxCabinetName);
字符串可为空,因此在某些时候您必须执行类似于以下内容的操作:
cabinetsCurrentNotUsed.Add(null);
无论是这样还是像dbaseman所说的那样,有可能lbxCabinetName
是空的,但我敢打赌事实并非如此。
顺便说一句,这不是一个真正的问题,但是如果您使用的是字符串的通用列表,则不需要ToString()
调用。你可以这样做:
lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i]);