为什么GetType().Name在字符串数组上进行调用Object[]而不是String[]?这似乎发生在任何元素类型中,例如Import-Csv会给你一个Object[]但每个元素都是一个PSCustomObject.
这是一个带数组的例子 String
$x = @('a','b','c')
$x[0].GetType().Name #String
$x.GetType().Name #Object[]
Run Code Online (Sandbox Code Playgroud) 请注意:
C:\> $x = @(1)
C:\> $x = @($x,2)
C:\> $x = @($x,3)
C:\> $x = @($x,4)
C:\> $x = @($x,5)
C:\> $x.Length
2
C:\> @($x |% { $_ }).Length
3
C:\> $x
Length : 2
LongLength : 2
Rank : 1
SyncRoot : {System.Object[] 2, 3}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 2
4
5
C:\>
Run Code Online (Sandbox Code Playgroud)
我预计管道会压平列表。但这并没有发生。我究竟做错了什么?
我经常在 VSCode 中有几行字符串,但需要一个用于 PowerShell 或 SQL 的数组。
我在 VSCode 中有
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
我在 Vscode 中需要类似的东西
('line1','line2','line3')
Run Code Online (Sandbox Code Playgroud)
导致
Select * from Table where Column in ('line1','line2','line3')
Run Code Online (Sandbox Code Playgroud)
或者
$a = 'line1','line2','line3'
Run Code Online (Sandbox Code Playgroud)
有这个功能/扩展吗?
在官方文档中提到这Length是 的一个别名Count,但是我发现它们的行为不同的一种情况。此外,如果我ForEach用 替换 method ForEach-Object,Length将会发出 3 。有人能解释一下吗?
> (1..3).ForEach({$_}).Length
1
1
1
Run Code Online (Sandbox Code Playgroud)
> (1..3).ForEach({$_}).Count
3
Run Code Online (Sandbox Code Playgroud) 假设我想从文件中读取一些字符串,并且对于每个字符串我想将其拆分。最后,我想获得字符串数组的数组。我尝试这样做的方法如下:
$toArchive = "./folders.txt"
$folderList = Get-Content $toArchive | ForEach-Object { @($_.split(" ")) }
Run Code Online (Sandbox Code Playgroud)
Get-Content应该返回一个字符串数组,对于每个字符串,我希望得到另一个字符串数组。但我的却不folderList是这样Object[],好像它被压扁了。例如,如果我的输入文件如下所示:
Docs /home/keddad/Documents/
NotDocs /home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)
我得到 4 个元素的数组:
Docs
/home/keddad/Documents/
NotDocs
/home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
更新:只是为了澄清一下,它绝对是 4 个字符串的数组:
PS /home/keddad/Documents/tbackup> $toArchive = "./folders.txt"
PS /home/keddad/Documents/tbackup> $folderList = Get-Content $toArchive | ForEach-Object { @($_.split(" ")) }
PS /home/keddad/Documents/tbackup> $folderList.count
4
PS /home/keddad/Documents/tbackup> $folderList
Docs
/home/keddad/Documents/
NotDocs
/home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)