空引用异常将对象添加到列表时 [英] Null Reference Exception When adding object to list

查看:66
本文介绍了空引用异常将对象添加到列表时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试将一个对象添加到一个对象内的列表时,即使该对象的所有属性都包含数据,我仍会收到NullReferenceException。
类-

I keep getting an NullReferenceException when I try to add an object to a list inside an object, even when all properties of the object contains data. Classes--

public class OrderInfo
    {
        public virtual string OrderNum { get; set; }
        public virtual string TrackingNum { get; set; }
        public virtual DateTime Shipdate { get; set; }
        public virtual string Cost { get; set; }
        public virtual string ShipMethod { get; set; }
        public virtual string ShipService { get; set; }
        public virtual string Country { get; set; }
        public virtual decimal Weight { get; set; }
        public virtual List<OrderItemInfo> OrderiTems { get; set; }

        public void AddShipmentItem(OrderItemInfo oi)
        {
            this.OrderiTems.Add(oi); // NULL Reference HERE
        }

    }

    public class OrderItemInfo
    {
        public virtual string OrderItemCode { get; set; }
        public virtual decimal? Quantity { get; set; }
        public virtual decimal? Cost { get; set; }
        public virtual decimal? Weight { get; set; }
        public virtual string Store { get; set; }
    }

然后,我有捕获任何可为空数据的代码。

Then I have code that catches if any nullable data is there.

private static OrderInfo GetOrderInfo(DataRow dr)
    {
        SqlConnection ShipworksConnectionString = 
        SqlCommand ShipworksCmd = new SqlCommand("SELECT OrderItem.Code,  

        InternationalShipmentCostAnalysisApp.OrderInfo ip = new      InternationalShipmentCostAnalysisApp.OrderInfo
            {
                OrderNum = (dr[0] is DBNull) ? String.Empty : dr[0].ToString(),
                TrackingNum = (dr[1] is DBNull) ? String.Empty : dr[1].ToString(),
                Shipdate = (dr[2] is DBNull) ? DateTime.MinValue :  Convert.ToDateTime(dr[2]),
                Cost = (dr[3] is DBNull) ? String.Empty : dr[3].ToString(),
                ShipMethod = (dr[4] is DBNull) ? String.Empty : dr[4].ToString(),
                ShipService = (dr[5] is DBNull) ? String.Empty : dr[5].ToString(),
                Country = (dr[6] is DBNull) ? String.Empty : dr[6].ToString(),
                Weight = (dr[7] is DBNull) ? 0 : Convert.ToDecimal(dr[7])

            };

        ShipworksConnectionString.Open();

        SqlDataReader rdr = ShipworksCmd.ExecuteReader();
        DataTable dt = new DataTable();

        dt.Load(rdr);
        rdr.Close();
        ShipworksConnectionString.Close();

        foreach (DataRow item in dt.Rows)
        {
            if (item != null)
            {
                InternationalShipmentCostAnalysisApp.OrderItemInfo i = new InternationalShipmentCostAnalysisApp.OrderItemInfo
                {
                    OrderItemCode = (item[0] is DBNull) ? String.Empty : item[0].ToString(),
                    Quantity = (item[1] is DBNull) ? 0 : Convert.ToDecimal(item[1]),
                    Cost = (item[2] is DBNull) ? 0 : Convert.ToDecimal(item[2]),
                    Weight = (item[3] is DBNull) ? 0 : Convert.ToDecimal(item[3]),
                    Store = (item[4] is DBNull) ? String.Empty : item[4].ToString()

                };

                ip.AddShipmentItem(i);
            }

        }


        return ip;
    }


推荐答案

似乎您从未设置过属性...您已将其定义为 List< OrderItemInfo> type ,但从未将其初始化为 instance 这种类型的。尝试在构造函数中对其进行初始化:

It seems you never SET your property... You have it defined as a List<OrderItemInfo> type but you never initialize it to an instance of that type. Try initializing it in a constructor:

public class OrderInfo
{
    public OrderInfo
    {
        OrderiTems = new List<OrderItemInfo>();
    }
}

这篇关于空引用异常将对象添加到列表时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆