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
,从中可以生成枚举器:)