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 :(得分:5)
我认为你的问题标题显示了潜在的误解:
数组索引的别名
当您指定如此字符串时:
TestName = arrTestResults[0];
您没有为arrTestResults[0]
中包含的内容指定别名,而是将正在指向字符串arrTestResults[0]
的引用复制到TestName
。这是引用到字符串的副本,但不是别名。
稍后,当您为TestName
分配值时:
TestName = "Test 1: General";
这会复制新引用,覆盖旧引用。它对数组中的引用没有任何作用,因为它是一个单独的副本。
答案 1 :(得分:2)
TestName
不是arrTestResults[0]
的别名。
我假设arrTestResults
是string[]
而且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
复制到y
和x
。在我们的例子中,值是参考。对""
的引用将复制到arrTestResults[0]
和TestName
。
然后
arrTestResults[0] = "Test 1: General";
为存储位置arrTestResults[0]
分配新引用。
非常喜欢
y = 42;
然后
TestName = "Test 1: General";
为存储位置TestName
分配新引用。它不会改变arrTestResults[0]
的值,因为这两个存储位置不同。再次,这非常像
x = 69;
这不会改变y
的价值。
答案 2 :(得分:0)
这不是别名;这是一个独立的变量。
不可能将变量作为另一个变量或数组元素的别名(除非您使用不安全的代码)。