C# 如何在不获取NULLREFERENCEEXCEPTION的情况下添加到列表?

C# 如何在不获取NULLREFERENCEEXCEPTION的情况下添加到列表?,c#,list,class,C#,List,Class,我一直在尝试向列表中添加来自sql db的信息。将新信息添加到列表时,我遇到的错误如下: “StatusScope.dll中发生'System.NullReferenceException'类型的异常,但未在用户代码中处理 其他信息:对象引用未设置为对象的实例。“ 我如何解决这个错误 MapLogic.cs public static List<MapModel.ClientInfo> GetClientsData() { SqlConnection Conn

我一直在尝试向列表中添加来自sql db的信息。将新信息添加到列表时,我遇到的错误如下:

“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;
    }
publicstaticlist GetClientsData()
{
SqlConnection=site.Models.Shared.DBConnection.GetConnection();
SqlDataReader=null;
SqlCommand Command=new SqlCommand(“选择DocInfo.DocID、DocInfo.DocName、DocInfo.DocPic、DocInfo.PatientAcceptance、ClientInfo.ClientName、ClientInfo.AddressLocal、ClientInfo.AddressBroad、ClientInfo.Phone、ClientInfo.Lat、ClientInfo.Long、ClientInfo.ClientID,从DocInfo.ClientID=ClientInfo.ClientID上的DocInfo内部连接ClientInfo;”连接);
Reader=Command.ExecuteReader();
var ClientsData=新列表{};
int-IDCounter=0;
bool FirstRun=false;
while(Reader.Read())
{
如果(!FirstRun)
{
ClientsData.Add(新建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[“Local”]。ToString(),Phone=Reader[“Phone”].ToString(),latitude=Reader[“Lat”].ToString(),longitude=Reader[“Long”].ToString(),DocNames={});
FirstRun=true;
}
其他的
{
对于(var x=0;x
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; }


        }
公共类ClientInfo
{
公共int Id{get;set;}
公共字符串ClientID{get;set;}
公共字符串ClientName{get;set;}
公共列表DocNames{get;set;}
公共字符串DocPic{get;set;}
公共字符串PatientAcceptance{get;set;}
公共字符串地址本地{get;set;}
公共字符串AddressBroad{get;set;}
公用字符串电话{get;set;}
公共字符串纬度{get;set;}
公共字符串经度{get;set;}
}

在添加之前是否测试
ClientsData[x].DocNames
是否为空?您可以将代码更改为

if(ClientsData[x].DocNames == null) {
    ClientsData[x].DocNames = new List<string>();
}

ClientsData[x].DocNames.Add("123");
if(ClientsData[x].DocNames==null){
ClientsData[x].DocNames=new List();
}
ClientsData[x].DocNames.Add(“123”);

所以它总是有效的。

在添加之前,不是要测试
ClientsData[x].DocNames
是否为空吗?您可以将代码更改为

if(ClientsData[x].DocNames == null) {
    ClientsData[x].DocNames = new List<string>();
}

ClientsData[x].DocNames.Add("123");
if(ClientsData[x].DocNames==null){
ClientsData[x].DocNames=new List();
}
ClientsData[x].DocNames.Add(“123”);

所以它总是有效的。

你有没有设置过
DocNames
?否则,它将为空

ClientInfo
的构造函数中

DocNames = new List<string>();
DocNames=newlist();

初始化空列表。

您是否将
DocNames
设置为任何值?否则,它将为空

ClientInfo
的构造函数中

DocNames = new List<string>();
DocNames=newlist();

要初始化空列表。

在向ClientsData列表添加新MapModel.ClientInfo的两行中,都需要将DocNames初始化为新列表(),否则每当尝试访问DocNames时,它始终为空。因此,在这两个地方,您都需要执行以下操作:

ClientsData.Add(new MapModel.ClientInfo                 
{ 
  Id = IDCounter,                       
  //.
  //. removing code just to make my answer shorter
  //.
  DocNames = new List<string>()
});
ClientsData.Add(新的MapModel.ClientInfo
{ 
Id=Id计数器,
//.
//.删除代码只是为了缩短我的答案
//.
DocNames=新列表()
});

在将新的MapModel.ClientInfo添加到ClientsData列表的两行中,您需要将DocNames初始化为新列表(),否则每当您尝试访问DocNames时,它始终为空。因此,在这两个地方,您都需要执行以下操作:

ClientsData.Add(new MapModel.ClientInfo                 
{ 
  Id = IDCounter,                       
  //.
  //. removing code just to make my answer shorter
  //.
  DocNames = new List<string>()
});
ClientsData.Add(新的MapModel.ClientInfo
{ 
Id=Id计数器,
//.
//.删除代码只是为了缩短我的答案
//.
DocNames=新列表()
});

“DocNames={}”此行可疑。是否将公用列表DocNames{get;set;}更改为公用列表?DocNames{get;set;}“DocNames={}”此行可疑。是否将公用列表DocNames{get;set;}更改为公用列表?DocNames{get;set;}如何使用
newlist()
?如何使用
newlist()