我正在尝试制作System.Memory[char]
。
[System.Memory[char]]::Memory([char],0,10)
*表示找不到System.Memory类型。
也尝试过*
[System.Memory`3+[[char],0,10]]@()
解决方案:问题似乎是Powershell使用的.NET版本。
是PowerShell v5中引入的静态伪方法::new()
,提供了对类型的构造函数的访问[1]
# Initialize a [System.Memory[char]] instance with 10 NUL (0x0) chars,
# from a [char[]] array.
[System.Memory[char]]::new(
[char[]]::new(10)
)
注意:两个System.Memory`1
构造函数都需要一个[char[]]
数组作为参数。三参数重载中的两个附加参数start
和length
必须引用该数组中的一系列元素。
上面简单地创建了一个10元素数组(隐式使用NUL
字符(,从而无需额外的参数。
如果您希望输入数组使用NUL
以外的给定字符,则可以使用类似, [char] 'x' * 10
:, [char] 'x'
的方法创建一个带有char的单元素数组。'x'
,然后* 10
对其进行复制以返回10元素的阵列。请注意,数组将是[object[]]
类型的,而不是[char[]]
类型的,但它仍然可以工作。
注:
[System.Memory[char]]@()
不起作用,因为PowerShell要将此强制转换转换为单参数构造函数调用,操作数必须是[char[]]
数组:[System.Memory[char]] [char[]] @()
从根本上讲,
System.Memory`1
类型仅在.NET核心2.1+/.NET5+中可用。- 检查该类型在PowerShell会话中是否可用的最简单方法是
[bool] $IsCoreClr
是否返回$true
-换句话说:您需要运行PowerShell(Core(7+,这是PowerShell的现代、跨平台、按需安装版
- 检查该类型在PowerShell会话中是否可用的最简单方法是
[1]在早期的PowerShell版本中,您需要使用New-Object
cmdlet,它使用参数(-解析(模式,就像所有cmdlet一样。因此,它的语法不能干净地映射到方法/构造函数调用中熟悉的表达式模式语法上,尤其是在传递单个参数时,该参数是数组,如本例所示:New-Object System.Memory[char] -ArgumentList (, (New-Object char[] 10))
请注意,需要将, [char] 0) * 10
构建的数组封装在另一个数组中,即使New-Object
将原始数组视为目标构造函数的单个参数所需的临时数组。
此外,::new()
表现更好,尽管这通常无关紧要。有关详细信息,请参阅此答案