2011-06-13 189 views
-2
public string[] arrTestResults = new string[8]; 
public string TestName; 
[TestInitialize] 
public void SetupTest() 
    { 
     // Assigning aliases to array indexes 
     TestName = arrTestResults[0] = ""; 
    } 


    public void General() 
    { 
     arrTestResults[0] = "Test 1: General"; // works 

     TestName = "Test 1: General"; // does not work. Quick Watch says TestName = Null. WHY? 
+0

當你說「不行」時,你是什麼意思?你會得到什麼樣的錯誤? – 2011-06-13 18:20:19

+0

我做了一個快速觀察,看到TestName = Null – Maya 2011-06-13 18:20:57

+0

什麼類型的對象是TestName?告訴我們它的聲明 – Omer 2011-06-13 18:21:23

回答

2

TestName不是arrTestResults[0]的別名。

我假設arrTestResultsstring[]TestName也是。

arrTestResults[0]是一個存儲位置,其值指的是string的實例。

TestName是一個存儲位置,其值指的是string的實例。

TestName = arrTestResults[0] = ""; 

不作TestName一個別名arrTestResults[0]。相反,它將存儲位置TestName和存儲位置arrTestResults[0]分配給string的實例,該實例等於""。也就是說,有一個對""的引用。該參考被分配到arrTestResults[0]TestName。這是很相似

int y = 0; 
int x = y = 17; 

這裏,x不是y的別名。我們剛剛將17的值複製到yx。在我們的案例中,值是參考。對""的引用被複制到arrTestResults[0]TestName

然後

arrTestResults[0] = "Test 1: General"; 

分配一個新的參考存儲位置arrTestResults[0]

這很喜歡

y = 42; 

然後

TestName = "Test 1: General"; 

分配一個新的參考存儲位置TestName。它不會更改arrTestResults[0]的值,因爲這兩個存儲位置是不同的。再次,這很像

x = 69; 

這並不改變y的值。

+0

非常感謝Jason! – Maya 2011-06-13 18:34:13

5

我覺得你的問題的標題所示的是潛在的誤解:

數組的索引的別名

當你將一個字符串像這樣:

TestName = arrTestResults[0]; 

您不會爲arrTestResults[0]中包含的內容分配別名,而是將引用複製到字符串arrTestResults[0]指向TestName。這是參考文獻的一個拷貝到一個字符串,但不是一個別名。

以後,當你把值賦給TestName

TestName = "Test 1: General"; 

此份新的參考,覆蓋舊的。它對數組中的引用沒有任何作用,因爲它是單獨的副本。

0

這不是別名;這是一個獨立變量。

不可能將變量作爲另一個變量或數組元素的別名(除非使用不安全的代碼)。