为数组中的所有对象转换 属性 的数据类型

Convert data type of property for all objects in an array

假设我有一个对象数组:

$a = @(
    @{ Name = "A"; Value = "2016-01-02" },
    @{ Name = "B"; Value = "2016-01-03" },
    @{ Name = "C"; Value = "2016-01-04" }
)

Value 属性 目前是 String。我想将每个对象的 Value 属性 转换为 DateTime。我可以用 for 循环来完成这个,但我想知道是否有更直接的方法来做到这一点。

这会将第一个对象值的数据类型更改为日期时间。

$a[0].value = [datetime]::ParseExact($a[0].value,'yyyy-MM-dd',$null)

从这里开始循环:

foreach ($Obj in $a)
    {
    $Obj.Value = [datetime]::ParseExact($Obj.value,'yyyy-MM-dd',$null)
    }

您接受的@TessellatingHeckler 的回答对您的问题不正确!它只是更改对象中数据的表示形式,而不是按照您的要求进行转换。即使您将其另存为新对象(或覆盖原始对象),这也会更改对象本身。如果您 运行 流动代码,您可以看到差异:

$b=$a | select @{N='Name';E={$_.Name}}, @{N='Value';E={ [datetime]$_.Value }}
#check the original and converted object
$a|gm
$b|gm

是的,计算属性。

$a | select @{N='Name';E={$_.Name}}, @{N='Value';E={ [datetime]$_.Value }}