2011-06-13 37 views
0
public string[] TestResults = new string[8]; 

我想將上面的數組的每個項目分配給一個變量。例如,如何爲數組的每個索引分配一個變量名?

TestName = TestResults[0]; 

我得到的消息:一個字段初始不能引用非靜態字段,方法或屬性」當我做了以下內容:

public string TestName = TestResults[0]; 

請建議我我如何解決這個

+0

謝謝大家對我的幫助。 :)) – Maya 2011-06-13 14:46:39

+0

[C#7增加了通過引用返回並將參考存儲在局部變量中的功能](https://www.danielcrabtree.com/blog/128/c-sharp-7-ref-returns-ref-locals - 和 - 如何使用的 - 它們)。 – 2017-06-12 12:44:30

回答

3

你不能在一個變量初始化器中這麼做,基本上......儘管這個值是空的,但你不能在變量初始化器中引用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; } 
    } 
} 
1

如果你正在尋找有對數組的索引,你可以使用下面的代名詞:

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

這創建了一組稱爲屬性的方法,這些方法在類似於變量的語法中調用。如果您不希望外部寫入訪問,則可以刪除set部分。

如果你想要一個變量的副本,你需要在其他的地方寫入它,比如在構造函數中。

3

您似乎認爲,如果您的代碼正常工作,TestName將成爲TestResults[0]的別名,從而讀取或寫入該變量也會更改該數組。不是這種情況。

你能做什麼,使用這個屬性:

public string[] TestResults; 

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

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

你甚至可以使它成爲一個索引器屬性,以避免重複( - : – 2011-06-13 14:30:01

+0

@亨克Holterman:這個想法顯然是爲數組元素提供一個語義上更有意義的名稱。索引器只會暴露數組本身已經暴露的內容:八個字符串的有序序列,沒有特殊的語義含義。我會爲每個數組元素創建一個屬性並完全隱藏數組。 – dtb 2011-06-13 14:48:08

+0

好像笑臉也失去了它們的效果... – 2011-06-13 14:50:55

0

這是因爲

public string TestName = TestResults[0]; 

將設定測試名到存儲在TestResults串的同一個實例[0] 。換句話說,TestName將是存儲在TestResults [0]中的對象的引用,而不是對TestResults [0]的內存地址的引用。

根據代碼是如何設置的,我只是將使用屬性和它們的干將:

public string TestName 
{ 
    get { return TestResults[0]; } 
} 
相關問題