如何在不获得NULLREFERENCEEXCEPTION的情况下添加到列表中
本文关键字:添加 情况下 列表 NULLREFERENCEEXCEPTION | 更新日期: 2024-09-27 07:53:52
我一直在尝试添加到列表列表中,添加来自sql数据库的信息。当我把新信息添加到列表中时,我得到的错误是:
"StatusScope.dll中发生类型为"System.NullReferenceException"的异常,但未在用户代码中处理
附加信息:对象引用未设置为对象的实例。"
我该如何解决此错误?
MapLogic.cs
public static List<MapModel.ClientInfo> GetClientsData()
{
SqlConnection Connection = site.Models.Shared.DBConnection.GetConnection();
SqlDataReader Reader = null;
SqlCommand Command = new SqlCommand("SELECT DocInfo.DocID, DocInfo.DocName, DocInfo.DocPic, DocInfo.PatientAcceptance, ClientInfo.ClientName, ClientInfo.AddressLocal, ClientInfo.AddressBroad, ClientInfo.Phone, ClientInfo.Lat, ClientInfo.Long, ClientInfo.ClientID FROM DocInfo INNER JOIN ClientInfo ON DocInfo.ClientID = ClientInfo.ClientID;", Connection);
Reader = Command.ExecuteReader();
var ClientsData = new List<MapModel.ClientInfo> { };
int IDCounter = 0;
bool FirstRun = false;
while (Reader.Read())
{
if (!FirstRun)
{
ClientsData.Add(new MapModel.ClientInfo { Id = IDCounter, ClientID = Reader["ClientID"].ToString(), ClientName = Reader["ClientName"].ToString(), DocPic = Reader["DocPic"].ToString(), PatientAcceptance = Reader["PatientAcceptance"].ToString(), AddressLocal = Reader["AddressLocal"].ToString(), AddressBroad = Reader["AddressLocal"].ToString(), Phone = Reader["Phone"].ToString(), latitude = Reader["Lat"].ToString(), longitude = Reader["Long"].ToString(), DocNames = { } });
FirstRun = true;
}
else
{
for (var x = 0; x < ClientsData.Count; x++)
{
if (ClientsData[x].ClientID == Reader["ClientID"].ToString())
{
ClientsData[x].DocNames.Add("123"); //error occurs here
}
else
{
ClientsData.Add(new MapModel.ClientInfo { Id = IDCounter, ClientID = Reader["ClientID"].ToString(), ClientName = Reader["ClientName"].ToString(), DocPic = Reader["DocPic"].ToString(), PatientAcceptance = Reader["PatientAcceptance"].ToString(), AddressLocal = Reader["AddressLocal"].ToString(), AddressBroad = Reader["AddressLocal"].ToString(), Phone = Reader["Phone"].ToString(), latitude = Reader["Lat"].ToString(), longitude = Reader["Long"].ToString() });
}
}
}
IDCounter++;
}
Connection.Close();
return ClientsData;
}
MapModel.cs
public class ClientInfo
{
public int Id { get; set; }
public string ClientID { get; set; }
public string ClientName { get; set; }
public List<string> DocNames { get; set; }
public string DocPic { get; set; }
public string PatientAcceptance { get; set; }
public string AddressLocal { get; set; }
public string AddressBroad { get; set; }
public string Phone { get; set; }
public string latitude { get; set; }
public string longitude { get; set; }
}
您曾经将DocNames
设置为任何值吗?否则,它将为null。
在ClientInfo
的构造函数中,应该有
DocNames = new List<string>();
以初始化一个空列表。
这不是在添加之前测试ClientsData[x].DocNames
是否为null的情况吗?您可以将代码更改为
if(ClientsData[x].DocNames == null) {
ClientsData[x].DocNames = new List<string>();
}
ClientsData[x].DocNames.Add("123");
所以它总是有效的。
在将新的MapModel.ClientInfo添加到ClientsData列表的两行中,都需要将DocNames初始化为新的list(),否则无论何时尝试访问DocNames,它总是为null。因此,在这两个地方你都需要做以下事情:
ClientsData.Add(new MapModel.ClientInfo
{
Id = IDCounter,
//.
//. removing code just to make my answer shorter
//.
DocNames = new List<string>()
});