public string[] TestResults = new string[8];
我想將上面的數組的每個項目分配給一個變量。例如,如何爲數組的每個索引分配一個變量名?
TestName = TestResults[0];
我得到的消息:一個字段初始不能引用非靜態字段,方法或屬性」當我做了以下內容:
public string TestName = TestResults[0];
請建議我我如何解決這個
public string[] TestResults = new string[8];
我想將上面的數組的每個項目分配給一個變量。例如,如何爲數組的每個索引分配一個變量名?
TestName = TestResults[0];
我得到的消息:一個字段初始不能引用非靜態字段,方法或屬性」當我做了以下內容:
public string TestName = TestResults[0];
請建議我我如何解決這個
你不能在一個變量初始化器中這麼做,基本上......儘管這個值是空的,但你不能在變量初始化器中引用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; }
}
}
如果你正在尋找有對數組的索引,你可以使用下面的代名詞:
public string TestName
{
get { return TestResults[0]; }
set { TestResults[0] = value; }
}
這創建了一組稱爲屬性的方法,這些方法在類似於變量的語法中調用。如果您不希望外部寫入訪問,則可以刪除set
部分。
如果你想要一個變量的副本,你需要在其他的地方寫入它,比如在構造函數中。
您似乎認爲,如果您的代碼正常工作,TestName
將成爲TestResults[0]
的別名,從而讀取或寫入該變量也會更改該數組。不是這種情況。
你能做什麼,使用這個屬性:
public string[] TestResults;
public MyClass()
{
TestResults = new string[8];
}
public string TestName
{
get { return TestResults[0]; }
set { TestResults[0] = value; }
}
你甚至可以使它成爲一個索引器屬性,以避免重複( - : – 2011-06-13 14:30:01
@亨克Holterman:這個想法顯然是爲數組元素提供一個語義上更有意義的名稱。索引器只會暴露數組本身已經暴露的內容:八個字符串的有序序列,沒有特殊的語義含義。我會爲每個數組元素創建一個屬性並完全隱藏數組。 – dtb 2011-06-13 14:48:08
好像笑臉也失去了它們的效果... – 2011-06-13 14:50:55
這是因爲
public string TestName = TestResults[0];
將設定測試名到存儲在TestResults串的同一個實例[0] 。換句話說,TestName將是存儲在TestResults [0]中的對象的引用,而不是對TestResults [0]的內存地址的引用。
根據代碼是如何設置的,我只是將使用屬性和它們的干將:
public string TestName
{
get { return TestResults[0]; }
}
謝謝大家對我的幫助。 :)) – Maya 2011-06-13 14:46:39
[C#7增加了通過引用返回並將參考存儲在局部變量中的功能](https://www.danielcrabtree.com/blog/128/c-sharp-7-ref-returns-ref-locals - 和 - 如何使用的 - 它們)。 – 2017-06-12 12:44:30