gpt4 book ai didi

访问 Array.Length 属性后,Powershell 脚本失败

转载 作者:行者123 更新时间:2023-12-04 11:46:08 25 4
gpt4 key购买 nike

有人可以解释为什么这个脚本会引发异常吗?

$byteArray = @(1,2,3)
write-Output ( "{0:X}{1:X}{2:X}" -f $byteArray )
write-Output ( $byteArray.Length -ge 3 )
write-Output ( "{0:X}{1:X}{2:X}" -f $byteArray )

基本上,我正在创建一个数字数组,格式化数组,然后检查它的长度并再次格式化。

第一种格式成功,但第二种格式抛出异常。
123
True
--------------------------------------------------------------------------------
POWERSHELL EXCEPTION
EXCEPTION TYPE:System.Management.Automation.RuntimeException
MESSAGE:Error formatting a string: Index (zero based) must be greater than or equal to zero and less than the size of the argument list..
POSITION:
At line:4 char:36
+ write-Output ( "{0:X}{1:X}{2:X}" -f <<<< $byteArray )
--------------------------------------------------------------------------------

最佳答案

要添加到拼图中:

PS > $a = @(1,2,3)
PS > $b = $a
PS > [object]::ReferenceEquals($a, $b)
True
PS > $a.Length
3
PS > [object]::ReferenceEquals($a, $b)
True
PS > "{0:X}{1:X}{2:X}" -f $a
Error formatting a string: Index (zero based) must be greater than or equal to zero and less than the size of the argum
ent list..
At line:1 char:21
+ "{0:X}{1:X}{2:X}" -f <<<< $a
PS > "{0:X}{1:X}{2:X}" -f $b
123
PS > $b.GetLength(0)
3
PS > "{0:X}{1:X}{2:X}" -f $b
123
PS > [object]::ReferenceEquals($a, $b)
True

我倾向于同意 Jared 的观点,这是 -f 的一个怪癖。运算符将变量视为对象而不是数组,部分支持如下:
PS > $a = @(1,2,3)
PS > "{0:X}{1:X}{2:X}" -f $a
123
PS > "{0:X}{1:X}{2:X}" -f $a.PSObject
Error formatting a string: Index (zero based) must be greater than or equal to zero and less than the size of the argum
ent list..
At line:1 char:21

如果底层对象不能作为参数接受,那么 $a最初存储使 -f快乐的。但这仍然不能解释为什么调用 GetLength()不影响 $b的“排列”方式, Length (和 Rank )似乎。

正如其他人所指出的,使用 @()似乎始终如一地工作。

关于访问 Array.Length 属性后,Powershell 脚本失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1081216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com