簡體   English   中英

嘗試設置 class 屬性時出現 NullReferenceException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM