开发者

What is the difference between assigning a value to an index of an array and assigning a value to the alias of the index of an array?

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 Wat开发者_开发百科ch says TestName = Null. WHY? 


I think your question title shows the potential misunderstanding here:

the alias of the index of the array

When you assign a string like so:

TestName = arrTestResults[0];

You're NOT assigning an alias to what's contained in arrTestResults[0], rather, you're copying the reference to the string arrTestResults[0] is pointing to into TestName. This is a copy of the reference to a string, but not an alias.

Later, when you assign a value to TestName:

TestName = "Test 1: General";

This copies a new reference, overwriting the old one. It does nothing to the reference in the array, as that's a separate copy.


TestName is NOT an alias to arrTestResults[0].

I'm assuming that arrTestResults is string[] and that TestName is too.

arrTestResults[0] is a storage location whose value refers to an instance of string.

TestName is a storage location whose value refers to an instance of string.

TestName = arrTestResults[0] = "";

does not make TestName an alias for arrTestResults[0]. Instead, it assigns to the storage location TestName and to the storage location arrTestResults[0] a reference to an instance of string that is equal to "". That is, there is a reference to "". That reference is assigned to arrTestResults[0] and to TestName. It is quite similar to

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

Here, x is NOT an alias for y. We have just copied the value 17 to y and to x. In our case, the value is the reference. A reference to "" is copied to arrTestResults[0] and to TestName.

Then

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

assigns a new reference to the storage location arrTestResults[0].

It's quite like

y = 42;

And then

 TestName = "Test 1: General"; 

assigns a new reference to the storage location TestName. It does not alter the value of arrTestResults[0] because these two storage locations are different. Again, this is quite like

x = 69;

This does not alter the value of y.


That's not an alias; it's an independent variable.

It is not possible to make a variable that is an alias to another variable or to an array element (unless you use unsafe code).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜