将值赋给数组的索引并将值赋给数组索引的别名有什么区别?

时间:2011-06-13 18:18:11

标签: c# arrays

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? 

3 个答案:

答案 0 :(得分:5)

我认为你的问题标题显示了潜在的误解:

  

数组索引的别名

当您指定如此字符串时:

TestName = arrTestResults[0];

您没有为arrTestResults[0]中包含的内容指定别名,而是将正在指向字符串arrTestResults[0]的引用复制到TestName。这是引用到字符串的副本,但不是别名。

稍后,当您为TestName分配值时:

TestName = "Test 1: General";

这会复制新引用,覆盖旧引用。它对数组中的引用没有任何作用,因为它是一个单独的副本。

答案 1 :(得分: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的价值。

答案 2 :(得分:0)

这不是别名;这是一个独立的变量。

不可能将变量作为另一个变量或数组元素的别名(除非您使用不安全的代码)。