尝试设置类属性时出现NullReferenceException

时间:2011-05-29 11:06:33

标签: c# mono nullreferenceexception

基本上我有两个类,“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。

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";