2

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

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

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

但是,这不会:

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

这实际上会生成一个从 97 到 122 的数字列表

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

那里的任何专家可以向我解释这是如何工作的(或没有)?

4

2 回答 2

7

在您的第二个示例中,您尝试将字符数组转换为单个字符[char]。那是行不通的。在第三个示例中,'a'PowerShell 将其视为字符串。因此,将其转换为 [char] 会告诉 PowerShell 它是单个字符。运算符的..范围超过了数字。幸运的是,PowerShell 可以将字符“a”转换为其 ASCII 值 97,将“z”转换为 122。因此,您可以有效地以 97..122 结束。然后在您的第一个示例中,将该[char[]]整数数组转换回字符数组:a 到 z。

于 2013-11-14T03:42:30.293 回答
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 码。

于 2013-11-14T03:45:14.397 回答