PowerShell中string[]无法转换为object[]的问题排查
PowerShell中string[]转object[]的特殊类型转换问题
在PowerShell环境中存在特殊的类型转换行为:除string[]外,int[]、char[]、bool[]、DateTime[]等其他类型的数组均可直接赋值给object[]类型变量并完成转换;但将string[]赋值给object[]类型变量时,变量的类型会被修改为string[],而非完成向object[]的转换。
现象验证代码
[int[]]$intary = 2,4 [char[]]$chrary = 'a','b' [bool[]]$booary = $true,$false [DateTime[]]$datary = (Get-Date),(Get-Date) [string[]]$strary = 'c','d' $splary = 'e,f' -split ',' # -split 返回的是[string[]]类型 [object[]]$objaryi = @() [object[]]$objaryc = @() [object[]]$objaryb = @() [object[]]$objaryd = @() [object[]]$objarys = @() [object[]]$objarysp = @() $intary.GetType() # Int32[] $chrary.GetType() # Char[] $booary.GetType() # Boolean[] $datary.GetType() # DateTime[] $strary.GetType() # String[] $splary.GetType() # String[] $objaryi.GetType() # Object[] 'conversions' $objaryi = $intary # Int32[] 转换为 Object[] $objaryi.GetType() # Object[] $objaryc = $chrary # Char[] 转换为 Object[] $objaryc.GetType() # Object[] $objaryb = $booary # Boolean[] 转换为 Object[] $objaryb.GetType() # Object[] $objaryd = $datary # DateTime[] 转换为 Object[] $objaryd.GetType() # Object[] $objarys = $strary # 未转换为 Object[]; 反而将$objarys的类型改为 String[] $objarys.GetType() # String[] $objarysp = $splary # 未转换为 Object[]; 反而将$objarysp的类型改为 String[] $objarysp.GetType() # String[] $objarys = @($strary) # 数组子表达式运算符@() 可以实现转换为 Object[] $objarys.GetType() # Object[] $objarysp = @($splary) # 数组子表达式运算符@() 可以实现转换为 Object[] $objarysp.GetType() # Object[] 'inline cast' $objarys = @([string[]]@(1,2)) # 数组子表达式运算符@() 在内联转换场景下无效[1] $objarys.GetType() # String[]
问题引发的异常
当变量被意外改为string[]类型后,存入哈希表时会被静默转换为类型名称字符串,导致无法正常访问哈希表内容:
$objaryi[0] = @{a=1;b=2} # 可以存储哈希表,因为类型是 Object[] $objaryi[0].GetType() # Hashtable $objaryi[0]['b'] # 2 $objarys[0] = @{a=1;b=2} # 因为是 String[],哈希表被静默转换为字符串 $objarys[0].GetType() # String $objarys[0]['b'] # $null; 不符合预期 $objarys[0] # 字符串值为 "System.Collections.Hashtable" $objarys[0].Length # 28
现有解决方案的局限性
目前仅能通过数组子表达式运算符@()实现string[]到object[]的转换,但在内联转换场景下该方法无法生效。
内容的提问来源于stack exchange,提问作者john v kumpf
相关产品推荐
相关产品推荐

