尝试设置类属性时出现NullReferenceException
本文关键字:NullReferenceException 属性 设置 | 更新日期: 2023-09-27 17:57:58
基本上我有两个类,"Manifest"answers"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。
您正在访问新创建的实例newManifest
的属性browser_action
,该实例仍然是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"
}
};
}
browser_action尚未初始化。在Manifest类中添加一个无参数构造函数,如下所示:
public class Manifest
{
public Manifest()
{
this.browser_action = new BrowswerAction;
}
public BrowserAction browser_action {get; set;}
}
在访问该实例上的属性之前,还必须初始化browser_action
。
newManifest.browser_action= new BrowserAction();
我认为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();
}
}
问题是属性browser_action从未初始化!
您已经初始化了newManifest,但browser_action仍然为null(可能)。
然后尝试在null browser_action上设置default_popup并获取异常
newManifestbrowser_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";