我有有效的代码,但我不知道它为什么有效。
这将生成一个包含英文字母表的每个字母的列表:
[char[]]([char]'a'..[char]'z')
但是,这不会:
[char]([char]'a'..[char]'z')
这实际上会生成一个从 97 到 122 的数字列表
([char]'a'..[char]'z')
那里的任何专家可以向我解释这是如何工作的(或没有)?
我有有效的代码,但我不知道它为什么有效。
这将生成一个包含英文字母表的每个字母的列表:
[char[]]([char]'a'..[char]'z')
但是,这不会:
[char]([char]'a'..[char]'z')
这实际上会生成一个从 97 到 122 的数字列表
([char]'a'..[char]'z')
那里的任何专家可以向我解释这是如何工作的(或没有)?
在您的第二个示例中,您尝试将字符数组转换为单个字符[char]
。那是行不通的。在第三个示例中,'a'
PowerShell 将其视为字符串。因此,将其转换为 [char] 会告诉 PowerShell 它是单个字符。运算符的..
范围超过了数字。幸运的是,PowerShell 可以将字符“a”转换为其 ASCII 值 97,将“z”转换为 122。因此,您可以有效地以 97..122 结束。然后在您的第一个示例中,将该[char[]]
整数数组转换回字符数组:a 到 z。
在 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 码。