【问题标题】:Adding DataTable to a List<DataTable>将 DataTable 添加到 List<DataTable>
【发布时间】:2020-11-03 05:25:02
【问题描述】:

我正在尝试将数据表添加到属于一种模式类的数据表列表(发布过滤操作)。我的调试语句_return.SearchResult.Add(_i); 出现以下异常。我在我的实际陈述中也遇到了同样的错误_return.SearchResult.Add(_t);。请帮我找出问题所在。

感谢和问候, S. Sudharsan

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

        public QR searchCMDBData(string SearchString)
        {
            QR _return = new QR();
            _return.responseType = ResponseType.MESSAGE;
            _return.responseMsg = "Successfully called as expected";
            string INVENTORY_FILE = ConfigurationManager.AppSettings["INVENTORY_FILE_PATH"];

            List<DataTable> _ret = new List<DataTable>();
            _ret = CMDB.GetRequestsDataFromExcel(INVENTORY_FILE);

            foreach (DataTable _i in _ret)
            {
                _return.SearchResult.Add(_i);
                if (_i.TableName == "Inventory Consolidated")
                {
                    DataTable _t = _i.AsEnumerable()
                            .Where(r => r.Field<string>("IP Address").Equals(SearchString) || r.Field<string>("Host Name").Equals(SearchString))
                            .CopyToDataTable();
                    if (_t.Rows.Count > 0)
                    {
                        _return.SearchResult.Add(_t);
                    }
                }
            }
            return _return;
        }
public enum ResponseType { SUCCESS, MESSAGE };

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

【问题讨论】:

  • 这能回答你的问题吗? What is a NullReferenceException, and how do I fix it?。提示:你在哪里初始化 SearchResult?
  • _return.SearchResult。在第一次迭代期间预计为空。因此它是空的。但是请告诉我我初始化模态类“QR”的方式是否有任何错误。
  • 您使用新列表初始化_ret。然后,您立即将其丢弃并将其设置为GetRequestsDataFromExcel 的返回值。但正如@klausgutter 指出的那样,您的 NRE 来自对_return.SearchResult.Add 的调用。除非您没有显示 QR 构造函数,否则 SearchResult 为空。您应该能够在调试器中快速推断出这个非常(您展示的代码将是一个很好的示例来练习使用调试器)
  • 如果_return.SearchResult 为空,你不能在上面调用Add - 它会抛出一个NRE
  • Hook.. 我的错.. 我没有正确理解 @klausgutter 的提示 :-) 感谢您使用构造函数。我知道它没有初始化。但不确定在哪里初始化它。在构造函数中初始化它修复了它..感谢您的快速帮助....!

标签: c# list datatable


【解决方案1】:

您必须新建List&lt;DataTable&gt; SearchResult,否则您尝试插入的值不是空列表,而是 null 列表。

您可以在 QR 类的构造函数中执行此操作,如下所示:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2015-02-28
    • 2013-09-21
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多