2016-08-19 34 views
-1

这是我的第一个问题。C#将属性设置为字典列表中的对象 - 为什么NullReferenceException?

我的表单应用程序中有此代码。我不明白为什么我总是得到一个NullReferenceException。

public partial class Form1 : Form 
{ 
    Dictionary<string, Product> ProductList = new Dictionary<string, Product>(); 

    public Form1() 
    { 
     InitializeComponent(); 

     Product product = new Product(); 
     Position position = new Position(); 
     product.Name = "ACAD"; 
     position.Name = "Industry"; 

     ProductList.Add(product.Name, product); 

     // NullReferenceException: 
     ProductList["ACAD"].PositionList.Add(position.Name, position); 

     // Following line works: 
     //listBox1.Items.Add(ProductList["ACAD"]); 
    } 
} 

class Product 
{ 
    public string Name { get; set; } 
    public Dictionary<string, Position> PositionList { get; set; } 
} 

class Position 
{ 
    public string Name { get; set; } 
} 

谢谢=)

+0

有人必须初始化'Product.PositionList'('= new Dictionary ...') –

+0

PositionList为null,所以NullReferenceException'Product product = new产品(); product.Name =“ACAD”; product.PositionList = new Dictionary ();' – din

+0

更改'class Product',以便'PositionList'被初始化。你可以写'公共变种PositionList =新词典<字符串,位置>()' –

回答

1

添加一个构造函数为您的产品类:

class Product 
{ 
    public string Name { get; set; } 
    public Dictionary<string, Position> PositionList { get; set; } 

    public Product() 
    { 
     PositionList = new Dictionary<string, Position>(); 
    } 
} 

而且可以避开从尝试的条目添加到您的空字典的空引用异常:ProductList["ACAD"].PositionList.Add(position.Name, position);

+0

非常感谢你=) –

相关问题