我的代码有效,但我不知道为什么会有效。
这将生成一个包含英文字母的每个字母的列表:
[char[]]([char]'a'..[char]'z')
然而,这不会:
[char]([char]'a'..[char]'z')
这实际上会生成一个97 - 122
的数字列表([char]'a'..[char]'z')
有没有专家向我解释这是如何工作的(或不是)?
答案 0 :(得分:7)
在第二个示例中,您尝试将一个字符数组转换为单个字符[char]
。那不行。在第三个示例中,'a'
被PowerShell视为字符串。因此将其转换为[char]告诉PowerShell它是一个单一的char。 ..
运算符的数字范围。幸运的是,PowerShell可以将字符'a'转换为ASCII值97,将'z'转换为122.所以你有效地结束了97..122。然后在第一个示例中,[char[]]
将该int数组转换回字符数组:a到z。
答案 1 :(得分:5)
在Powershell中,'a'是[string]类型。 [char]'a'显然是[char]类型。这些是非常不同的东西。
$string = 'a'
$char = [char]$string
$ string可以转换为[char],因为它是一个字符串,由一个字符组成。如果字符串中有多个字符,例如'ab'然后你需要一个[chars]数组,类型为[char []]。额外的方括号组表示一个数组。
$string | get-member
$char | get-member
揭示了两种类型的不同方法。 [char]类型具有.toint()方法。如果将其强制转换为[int],它将假定该字符的数字ASCII代码。
[int]$char
返回97,字母'a'的ASCII码。