将值分配给数组的索引与将值分配给数组的索引的别名之间有什么区别?

问题描述

|
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? 
    

解决方法

        
TestName
不是
arrTestResults[0]
的别名。 我假设
arrTestResults
也是
string[]
TestName
也是。 “ 2”是一个存储位置,其值引用“ 7”的一个实例。
TestName
是一个存储位置,其值引用
string
的一个实例。
TestName = arrTestResults[0] = \"\";
不会使“ 1”成为“ 2”的别名。相反,它为存储位置
TestName
和存储位置
arrTestResults[0]
分配了对等于
\"\"
string
实例的引用。即,有对“ 16”的引用。该参考分配给
arrTestResults[0]
TestName
。它非常类似于
int y = 0;
int x = y = 17;
在此,
x
不是
y
的别名。我们刚刚将值
17
复制到
y
x
。在我们的例子中,该值是参考。对“ 16”的引用将复制到“ 2”和“ 1”。 然后
arrTestResults[0] = \"Test 1: General\";
为存储位置“ 2”分配一个新引用。 就像
y = 42;
接着
 TestName = \"Test 1: General\"; 
为存储位置“ 1”分配一个新引用。它不会更改
arrTestResults[0]
的值,因为这两个存储位置不同。再次,这很像
x = 69;
这不会改变
y
的值。     ,        我认为您的问题标题在这里显示出潜在的误解:   数组索引的别名 当您像这样分配一个字符串时:
TestName = arrTestResults[0];
您不是要为
arrTestResults[0]
中包含的内容分配别名,而是将对字符串
arrTestResults[0]
指向的引用复制到
TestName
中。这是对字符串的引用的副本,但不是别名。 稍后,当您将值分配给
TestName
时:
TestName = \"Test 1: General\";
这将复制一个新引用,并覆盖旧引用。它对数组中的引用没有任何作用,因为它是一个单独的副本。     ,        那不是别名;它是一个自变量。 不可能使变量成为另一个变量或数组元素的别名(除非您使用不安全的代码)。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...