[英]NullReferenceException when trying to set class property
基本上我有 2 個類,“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。 我環顧四周,但似乎找不到問題所在。 它適用於“清單”class 的其他屬性,這些屬性只是字符串等。
如果相關,我的 IDE 是 MonoDevelop 2.4,我的框架是 Mono 2.6.7。
您正在訪問仍然是browser_action
的新創建實例newManifest
的屬性null
。
將您的示例更改為:
public void setManifest()
{
Manifest newManifest = new Manifest();
newManifest.browser_action = new BrowserAction();
newManifest.browser_action.default_popup = "popup.html";
}
我假設BrowserAction
有一個沒有 arguments 的公共可訪問構造函數。
或者在一個 go 中:
public void setManifest()
{
Manifest newManifest = new Manifest()
{
browser_action = new BrowserAction()
{
default_popup = "popup.html"
}
};
}
browser_action 尚未初始化。 像這樣向您的清單 class 添加無參數構造函數:
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 因為你沒有初始化它。 在訪問其屬性之前創建一個 object:
Manifest newManifest = new Manifest();
newManifest.browser_action = new BrowserAction();
newManifest.browser_action.default_popup = "popup.html";
將您的清單 class 更改為
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 並獲取異常
新清單。 browser_action .default_popup = "popup.html";
引用類型 object 的默認值為 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";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.