如何更新结构数组中的字段

问题描述 投票:0回答:1

我正在尝试在 PowerShell 中编写一个简单的结构数组。

Add-Type -TypeDefinition @"
public struct AppInfo
{
    public string PN;
    public string Description;
    public int CRC;
}
"@

$data = New-Object AppInfo[] 4

但是然后像这样更新任何字段:

$data[0].CRC = 42

仍将保留原始值。我发现如何真正更改数组中的值的唯一方法是创建一个新的

AppInfo
对象并将其复制到适当的元素中。

是否有一些正确的 PowerShell 语法可以让我修改就地

powershell
1个回答
0
投票

这在 结构类型(C# 参考)文档中得到了澄清,特别是在 结构初始化和默认值中,我们可以阅读以下内容:

结构体的所有成员字段在创建时都必须“明确分配”,因为结构体类型直接存储其数据。结构体的 default 值已

明确指定
所有字段为 0。调用构造函数时,必须明确指定所有字段。您可以使用以下机制初始化字段:

您可以将
    字段初始值设定项
  • 添加到任何字段或自动实现的属性。 您可以在构造函数主体中初始化任何字段或自动属性。
因此,为了回答您的问题,在 PowerShell 中,如果您想为结构体分配一个值,您可以使用哈希表初始化语法,对于无参数结构体,您可以在索引
CRC = 42

处使用

0
分配一个新实例:
$data = [AppInfo[]]::new(4)
$data[0] = [AppInfo]@{ CRC = 42 }

# PN Description CRC
# -- ----------- ---
#                 42
#                  0
#                  0
#                  0

	
© www.soinside.com 2019 - 2024. All rights reserved.