基本上我有两个类,“Manifest”和“BrowserAction”,如下所示:
public class BrowserAction
{
public string default_icon {get; set;}
public string default_title {get; set;}
public string default_popup {get; set;}
}
public class Manifest
{
public BrowserAction browser_action {get; set;}
}
问题是,当我尝试设置Manifest类的一个实例'browser_action.default_popup时,就像这样:
public void setManifest()
{
Manifest newManifest = new Manifest();
newManifest.browser_action.default_popup = "popup.html";
}
我收到System.NullReferenceException。我环顾四周,但似乎无法找到问题所在。它适用于“Manifest”类的其他属性,它们只是字符串等。
如果相关,我的IDE是MonoDevelop 2.4,我的框架使用Mono 2.6.7。
答案 0 :(得分:4)
您正在访问仍为browser_action
的新创建的实例newManifest
的属性null
。
将您的示例更改为:
public void setManifest()
{
Manifest newManifest = new Manifest();
newManifest.browser_action = new BrowserAction();
newManifest.browser_action.default_popup = "popup.html";
}
我假设BrowserAction
有一个没有参数的公共可访问构造函数。
或者一气呵成:
public void setManifest()
{
Manifest newManifest = new Manifest()
{
browser_action = new BrowserAction()
{
default_popup = "popup.html"
}
};
}
答案 1 :(得分:4)
browser_action尚未初始化。将一个无参数构造函数添加到您的Manifest类中,如下所示:
public class Manifest
{
public Manifest()
{
this.browser_action = new BrowswerAction;
}
public BrowserAction browser_action {get; set;}
}
答案 2 :(得分:3)
在访问该实例上的属性之前,您必须初始化browser_action
。
newManifest.browser_action= new BrowserAction();
答案 3 :(得分:2)
我认为Manifest.browser_action
属性返回null,因为您没有初始化它。在访问其属性之前创建对象:
Manifest newManifest = new Manifest();
newManifest.browser_action = new BrowserAction();
newManifest.browser_action.default_popup = "popup.html";
答案 4 :(得分:2)
将您的清单类更改为
public class Manifest
{
public BrowserAction browser_action { get; set; }
public Manifest()
{
browser_action = new BrowserAction();
}
}
问题是属性browser_action从未初始化!
答案 5 :(得分:1)
你已经初始化了newManifest,但是browser_action仍然是null(推测)。
然后,您尝试在null browser_action上设置default_popup并获取异常
newManifest。 browser_action .default_popup =“popup.html”;
答案 6 :(得分:1)
reference-type对象的默认值为null。在使用之前,您需要在BrowserAction
属性上创建browser_action
实例。
// Create Manifest instance
Manifest newManifest = new Manifest();
Console.Writeline (newManifest.browser_action == null); // Print true;
// Instantiate BrowserAction on browser_action property
newManifest.browser_action = new BrowserAction();
Console.Writeline (newManifest.browser_action == null); // Print false;
// Now you can use browser_action property
newManifest.browser_action.default_popup = "popup.html";