簡體   English   中英

如何為數組的每個索引分配一個變量名?

[英]How to assign a variable name to each index of an array?

public string[] TestResults = new string[8];

我想將上面數組的每個項目分配給一個變量。 例如,

TestName = TestResults[0];

我收到消息:當我執行以下操作時,字段初始值設定項無法引用非 static 字段、方法或屬性:

public string TestName = TestResults[0];

請建議我如何解決這個問題。

基本上,您不能在變量初始化程序中執行此操作……盡管無論如何該值都是 null 。 您不能在變量初始化程序中引用this ,因此您必須編寫:

public class Foo 
{
    // I hope your fields aren't really public...
    public string[] TestResults = new string[8];

    public string TestName;

    public Foo()
    {
        TestName = TestResults[0];
    }
}

請注意,無論如何這只會在構造時檢索值。 它不會將變量本身與數組中的第一個元素相關聯; 任何一個都可以改變而不影響另一個。 如果您希望TestName始終TestResults[0]相關聯,您可能希望使用屬性:

public class Foo
{
    // I hope your fields aren't really public...
    public string[] TestResults = new string[8];

    public string TestName
    {
        get { return TestResults[0]; }
        set { TestResults[0] = value; }
    }
}

您似乎假設,如果您的代碼有效,則TestName成為TestResults[0]的別名,這樣讀取或寫入該變量也會更改數組。 不是這種情況。

您可以做的是為此使用屬性:

public string[] TestResults;

public MyClass()
{
    TestResults = new string[8];
}

public string TestName
{
    get { return TestResults[0]; }
    set { TestResults[0] = value; }
}

如果您正在尋找數組索引的同義詞,您可以使用以下內容:

public string TestName
{
    get { return TestResults[0]; }
    set { TestResults[0] = value; }
}

這將創建一組稱為屬性的方法,這些方法以類似於變量的語法調用。 如果您不想在外部進行寫訪問,則可以刪除set部分。

如果您想要一個變量的副本,您將需要在其他某個點寫入它,例如在構造函數中。

發生這種情況是因為

public string TestName = TestResults[0];

將 TestName 設置為存儲在 TestResults[0] 中的相同字符串實例。 換句話說,TestName 將是對存儲在 TestResults[0] 中的 object 的引用,而不是對作為 TestResults[0] 的 memory 地址的引用。

根據您的代碼的設置方式,我將只使用屬性及其吸氣劑:

public string TestName
{
    get { return TestResults[0]; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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