一 将一个数组类型的变量赋值给另一个变量时默认采用地址引用。
导致两个变量最终任意一个做了修改,另一个也跟着被修改。
PS C:UsersAdministratorDesktop> [System.Collections.ArrayList]$ee = @(1..5)
PS C:UsersAdministratorDesktop> $ee.IsFixedSize
False
PS C:UsersAdministratorDesktop> $ee.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True ArrayList System.Object
PS C:UsersAdministratorDesktop>
PS C:UsersAdministratorDesktop> $ff = $ee
PS C:UsersAdministratorDesktop> $ff.IsFixedSize
False
PS C:UsersAdministratorDesktop> $ff.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True ArrayList System.Object
PS C:UsersAdministratorDesktop>
PS C:UsersAdministratorDesktop> $ee.Add(6)
5
PS C:UsersAdministratorDesktop> $ee
1
2
3
4
5
6
PS C:UsersAdministratorDesktop> $ff
1
2
3
4
5
6
PS C:UsersAdministratorDesktop>
这种方式有时候确实有很神奇的功能;单有时候不注意很容易引发bug。那么如何规避呢?
二 不直接将array对象赋值给另一个变量,而是创建新变量然后附加
PS C:UsersAdministratorDesktop> [System.Collections.ArrayList]$gg = @()
PS C:UsersAdministratorDesktop> $gg = $gg+$ee
PS C:UsersAdministratorDesktop> $gg
1
2
3
4
5
6
PS C:UsersAdministratorDesktop> $ee.Add(7)
6
PS C:UsersAdministratorDesktop> $gg
1
2
3
4
5
6
PS C:UsersAdministratorDesktop> $ee
1
2
3
4
5
6
7
PS C:UsersAdministratorDesktop>
这样新定义的变量就不会随着对方的变化而变化了。
三 与地址引用“相反”的值应用是怎样的现象:
PS C:UsersAdministratorDesktop> $a = 1
PS C:UsersAdministratorDesktop> $b =$a
PS C:UsersAdministratorDesktop> $b
1
PS C:UsersAdministratorDesktop> $a = 2
PS C:UsersAdministratorDesktop> $b
1
PS C:UsersAdministratorDesktop> $a
2
PS C:UsersAdministratorDesktop>
PS C:UsersAdministratorDesktop> $Global:aa = 1
PS C:UsersAdministratorDesktop> $b = $Global:aa
PS C:UsersAdministratorDesktop> $b
1
PS C:UsersAdministratorDesktop> $aa = 2
PS C:UsersAdministratorDesktop> $aa
2
PS C:UsersAdministratorDesktop> $Global:aa
2
PS C:UsersAdministratorDesktop> $b
1
PS C:UsersAdministratorDesktop>
这里只做现象的说明和最简单有效的解决方法;如果有大佬有更好的建议希望能评论区指点下!
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com