尝试设置类属性时出现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。

尝试设置类属性时出现NullReferenceException

您正在访问新创建的实例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";