Невозможно передать DateTime в метод класса - ошибка приведения - PullRequest
0 голосов
/ 06 декабря 2018

Я не могу передать объект 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

Что именно я здесь не так делаю?Я чувствую, что есть что-то очевидное, что я упускаю или не знаю, но на первый взгляд это кажется простым / достаточно простым, чтобы это могло просто сработать!

1 Ответ

0 голосов
/ 06 декабря 2018

$Input - это автоматическая переменная в PowerShell, и ваша попытка использовать input в качестве имени параметра в Utils.formatDate() является причиной такого странного поведения.Измените имя параметра, и метод будет вести себя как ожидалось:

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 ", "
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...