Мое понимание синтаксиса синтаксиса строки PowerShell "$($object)"
всегда заключалось в том, что $object
отличен до [System.String]
, который вызывает $object.ToString()
. Тем не менее, я заметил это любопытное поведение с классом [DateTime]
с использованием PowerShell 4.0 в Windows 8.1.Get-Date cast to string vs ToString()
PS> $x = Get-Date
PS> $x.GetType() | select -ExpandProperty Name
DateTime
PS> $x.ToString()
2015-05-29 13:36:06
PS> [String]$x
05/29/2015 13:36:06
PS> "$($x)"
05/29/2015 13:36:06
кажется, что "$($object)"
дает такое же поведение, как литье в строку, но явно производит различный результат от $object.ToString()
. $x.ToString()
соответствует краткому формату даты, установленному в intl.cpl (yyyy-MM-dd). [String]$x
, по-видимому, использует стандартное значение по умолчанию.
Возможно, это просто ошибка в классе DateTime, но я больше удивляюсь, что различные методы преобразования объекта в строку производят разные результаты. Каковы правила для литья объекта в строку, если не вызывать ToString()
? Является ли класс DateTime просто особым случаем из-за его перегрузки ToString(String)
?
У меня нет достаточно для ответа прямо сейчас, но я определенно заметил, что '.ToString()' не всегда дает тот же результат, как и встраивание объекта в строке (я не проверял если вложение всегда такое же, как приведение к '[String]'). Поэтому все, что я могу сказать, это не только '[DateTime]'. – briantist
'.Tostring()' принимает аргумент формата, поэтому, если вам требуется согласованность, всегда '.ToString() 'и предоставить желаемый формат. Между тем, согласился, что 'cast' должен просто называть' .ToString() 'и принимать все, что имеет формат по умолчанию. Не знаю, почему они будут реализовывать его любым другим способом. – johnjps111
[Вероятно, связанный] (http://stackoverflow.com/q/14359053/1630171). Я подозреваю, что кастинг использует en-US как культуру по умолчанию в любом случае. 'ToString()' OTOH использует текущую культуру, как [документально] (https://msdn.microsoft.com/en-us/library/k494fzbf%28v=vs.110%29.aspx). –