试图理解这段代码(创建[char]范围)

时间:2013-11-14 03:20:17

标签: powershell

我的代码有效,但我不知道为什么会有效。

这将生成一个包含英文字母的每个字母的列表:

[char[]]([char]'a'..[char]'z')

然而,这不会:

[char]([char]'a'..[char]'z')

这实际上会生成一个97 - 122

的数字列表
([char]'a'..[char]'z')

有没有专家向我解释这是如何工作的(或不是)?

2 个答案:

答案 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码。

相关问题