C# 将数据表添加到列表<;数据表>;

C# 将数据表添加到列表<;数据表>;,c#,list,datatable,C#,List,Datatable,我试图将一个数据表添加到属于某种模态类的DataTable列表(发布一个筛选器操作)。我在调试语句\u return.SearchResult.Add(\u I)中得到以下异常。我的实际语句中也出现了相同的错误\u return.SearchResult.Add(\u t)。请帮助我确定问题所在 谢谢和问候, 苏达桑 System.NullReferenceException HResult=0x80004003 Message=Object reference not set to a

我试图将一个数据表添加到属于某种模态类的DataTable列表(发布一个筛选器操作)。我在调试语句
\u return.SearchResult.Add(\u I)中得到以下异常。我的实际语句中也出现了相同的错误
\u return.SearchResult.Add(\u t)。请帮助我确定问题所在

谢谢和问候, 苏达桑

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=*******
  StackTrace:
   at *******.*******.searchCMDBData(String SearchString) in D:\GIT_VS2019_WorkSpace\*******\*******\*******.asmx.cs:line 38
   at *******.*******._Default.DoSearch(Object sender, EventArgs e) in D:\GIT_VS2019_WorkSpace\*******\*******.*******\Default.aspx.cs:line 57

公共QR searchCMDBData(字符串搜索字符串)
{
QR_return=新QR();
_return.responseType=responseType.MESSAGE;
_return.responseMsg=“按预期成功调用”;
字符串INVENTORY_FILE=ConfigurationManager.AppSettings[“INVENTORY_FILE_PATH”];
列表_ret=新列表();
_ret=CMDB.GetRequestsDataFromExcel(库存文件);
foreach(数据表在ret中)
{
_return.SearchResult.Add(_i);
如果(_i.TableName==“合并存货”)
{
数据表_t=_i.AsEnumerable()
其中(r=>r.Field(“IP地址”).Equals(搜索字符串)| | r.Field(“主机名”).Equals(搜索字符串))
.CopyToDataTable();
如果(_t.Rows.Count>0)
{
_return.SearchResult.Add(\u t);
}
}
}
返回(return);;
}
public enum ResponseType{SUCCESS,MESSAGE};
公共类QR
{
公共责任类型责任类型;
公共字符串响应;
公开列表搜索结果;
}

您必须重新设置
列表搜索结果,否则您将尝试在空列表中插入值,而不是在空列表中插入值

您可以在
QR
类的构造函数中这样做:

public class QR
{
    public ResponseType responseType;
    public string responseMsg;
    public List<DataTable> SearchResult;

    public QR(){
      SearchResult = new List<DataTable>();
    }
}
公共类QR
{
公共责任类型责任类型;
公共字符串响应;
公开列表搜索结果;
公共QR(){
SearchResult=新列表();
}
}

这是否回答了您的问题。提示:您在哪里初始化SearchResult?\u return.SearchResult。在第一次迭代期间应为null。因此,它应该为null。但是,请告诉我初始化模式类“QR”的方式是否有任何错误。您可以使用新列表初始化
\u ret
。然后,立即将其丢弃,并将其设置为返回值
GetRequestsDataFromExcel
。但正如@klausgoolt所指出的,您的NRE来自对
\u return.SearchResult.Add
的调用。除非您没有显示
QR
构造函数,
SearchResult
为空。如果
\u return.SearchResult
为空,您应该能够在调试器中很快推断出这一点(您显示的代码将是练习使用调试器的一个很好的示例)。您不能对其调用
Add
,它将抛出一个NREHook。。我的错。。我对@klausgoolt的提示理解得很好:-)谢谢你使用构造函数。我知道它没有初始化。但不确定在哪里初始化它。在构造函数中初始化它修复了它。。谢谢你的快速帮助!
public enum ResponseType { SUCCESS, MESSAGE };

    public class QR
    {
        public ResponseType responseType;
        public string responseMsg;
        public List<DataTable> SearchResult;
    }
public class QR
{
    public ResponseType responseType;
    public string responseMsg;
    public List<DataTable> SearchResult;

    public QR(){
      SearchResult = new List<DataTable>();
    }
}