开发者

NullReferenceException when trying to set class property

Basically I have 2 classes, "Manifest" and "BrowserAction", set out like this:

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

The problem is, that when I try to set an instance of the Manifest class' browser_action.default_popup, like this:

public void setManifest()
{
    Manifest newManifest = new Manifest();
   开发者_C百科 newManifest.browser_action.default_popup = "popup.html";
}

I get a System.NullReferenceException. I've looked around but I can't seem to find what the problem is. It works fine for other properties of the "Manifest" class that are just strings etc.

If it's relevant, my IDE is MonoDevelop 2.4, with Mono 2.6.7 for my framework.


You are accessing property browser_action of newly created instance newManifest that is still null.

Change your example to something like:

public void setManifest()
{
    Manifest newManifest = new Manifest();
    newManifest.browser_action = new BrowserAction();
    newManifest.browser_action.default_popup = "popup.html";
}

I am assuming that BrowserAction has a public accessible constructor with no arguments.

Or in one go:

public void setManifest()
{
    Manifest newManifest = new Manifest()
        {
            browser_action = new BrowserAction()
                {
                    default_popup = "popup.html"
                }
        };
}


browser_action has not been initialized. Add a parameterless constructor to your Manifest class like this:

public class Manifest
{
    public Manifest()
    {
           this.browser_action = new BrowswerAction;
    }

    public BrowserAction browser_action {get; set;}
}


You'll have to intialize browser_action too before accessing properties on that instance.

newManifest.browser_action= new BrowserAction();


I think the Manifest.browser_action property returns null because you don't initialize it. Create an object before accessing its properties:

Manifest newManifest = new Manifest();
newManifest.browser_action = new BrowserAction();
newManifest.browser_action.default_popup = "popup.html";


change your manifest class to

public class Manifest
{
    public BrowserAction browser_action { get; set; }
    public Manifest()
    {
        browser_action = new BrowserAction();
    }
}

the problem is the property browser_action never initialiazed!


You've initialised newManifest, but browser_action is still null (presumably).

You are then trying to set default_popup on the null browser_action and getting the exception

newManifest.browser_action.default_popup = "popup.html";


Default value for reference-type object is null. You need to create BrowserAction instance on browser_action property before using it.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜