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();
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'll have to intialize browser_action
too before accessing properties on that instance.
newManifest.browser_action= new BrowserAction();
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;}
}
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";