Powershell 无法将DateTime传递给类方法-强制错误
我似乎无法将Powershell 无法将DateTime传递给类方法-强制错误,powershell,Powershell,我似乎无法将datetime对象传递给我编写的任何类方法。以下是我正在尝试和得到的简单版本: class Utils { static [string] formatDate([datetime]$Input) { if($Input.Equals([datetime]::new(0))) { return "" } return $Input.ToString("MMddyy") } static [string] joinDates([datetime[]]$In
datetime
对象传递给我编写的任何类方法。以下是我正在尝试和得到的简单版本:
class Utils {
static [string] formatDate([datetime]$Input) {
if($Input.Equals([datetime]::new(0))) { return "" }
return $Input.ToString("MMddyy")
}
static [string] joinDates([datetime[]]$Input) {
return ($Input | ForEach{ $_.ToString("MMddyy")}) -Join ", "
}
}
当我尝试这个命令时,我得到一个错误:
> [Utils]::formatDate((Get-Date))
> No coercion operator is defined between types '`System.Object[]' and 'Utils'.
> At line:1 char:1
> + [Utils]::formatDate((Get-Date))
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : OperationStopped: (:) [], InvalidOperationException
> + FullyQualifiedErrorId : System.InvalidOperationException
然而,以下工作:
> [Utils]::joinDates(@((Get-Date), (Get-Date)))
> 120518, 120518
我到底做错了什么?我觉得有一些明显的东西我遗漏了或不知道,但从表面上看,这似乎很简单/基本,应该就行了 $Input
是PowerShell中的一个参数名,您试图在Utils.formatDate()
中使用Input
作为参数名,这就是导致这种奇怪行为的原因。更改参数名称,方法将按预期运行:
class Utils {
static [string] FormatDate([datetime]$datetime){
if($datetime -eq [datetime]::new(0)){ return "" }
return $datetime.ToString("MMddyy")
}
static [string] JoinDates([datetime[]]$datetimes){
return ($datetimes | ForEach-Object { $_.ToString("MMddyy") }) -join ", "
}
}
啊,这很有道理,谢谢!我有一个短暂的想法,但因为它对joinDates有效,我认为这是可能的。我猜
[datetime[]]
类型可能被“强制”为自动变量类型?再次感谢@有人说得对$Input
始终是一个ArrayList
枚举器,因此当您传递和数组时,powershell会将其转换为一个ArrayList
,从中可以生成枚举器:)