问题描述
|
基本上,我有两个类,“ 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;}
}
问题是,当我尝试设置清单类的实例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。
解决方法
在访问该实例的属性之前,您也必须将ѭ2初始化。
newManifest.browser_action= new BrowserAction();
, 您正在访问仍是instance6ѭ的新创建实例newManifest
的属性browser_action
。
将您的示例更改为类似以下内容:
public void setManifest()
{
Manifest newManifest = new Manifest();
newManifest.browser_action = new BrowserAction();
newManifest.browser_action.default_popup = \"popup.html\";
}
我假设“ 8”具有一个不带参数的公共可访问构造函数。
或一口气:
public void setManifest()
{
Manifest newManifest = new Manifest()
{
browser_action = new BrowserAction()
{
default_popup = \"popup.html\"
}
};
}
, browser_action尚未初始化。将无参数构造函数添加到您的Manifest类中,如下所示:
public class Manifest
{
public Manifest()
{
this.browser_action = new BrowswerAction;
}
public BrowserAction browser_action {get; set;}
}
, 我认为Manifest.browser_action
属性返回null,因为您没有对其进行初始化。在访问其属性之前创建一个对象:
Manifest newManifest = new Manifest();
newManifest.browser_action = new BrowserAction();
newManifest.browser_action.default_popup = \"popup.html\";
, 将清单类别更改为
public class Manifest
{
public BrowserAction browser_action { get; set; }
public Manifest()
{
browser_action = new BrowserAction();
}
}
问题是浏览器属性从未初始化!
, 您已经初始化了newManifest,但是browser_action仍然为null(大概是)。
然后,您试图在null browser_action上设置default_popup并获取异常
newManifest.browser_action.default_popup = \“ popup.html \”;
, 引用类型对象的默认值为null。您需要先在browser_action
属性上创建BrowserAction
实例,然后才能使用它。
// 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\";