为数组中的所有对象转换 属性 的数据类型
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 }}
假设我有一个对象数组:
$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 }}