mia comprensione di stringa di PowerShell embedding sintassi "$($object)"
è sempre stata che $object
è gettato a [System.String]
, che invoca $object.ToString()
. Tuttavia, ho notato questo strano comportamento con la classe [DateTime]
utilizzando PowerShell 4.0 su Windows 8.1.Get-Date cast stringa 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
Sembra che "$($object)"
dà lo stesso comportamento colata a stringa, ma sta producendo chiaramente un risultato diverso da $object.ToString()
. $x.ToString()
è coerente con il formato data breve impostato in intl.cpl (aaaa-MM-gg). [String]$x
sembra utilizzare l'impostazione predefinita en-US.
È possibile che questo sia semplicemente un bug nella classe DateTime, ma sono più sorpreso che i diversi metodi di conversione di un oggetto in una stringa producano risultati diversi. Quali sono le regole per lanciare un oggetto su una stringa, se non si chiama ToString()
? La classe DateTime è semplicemente un caso speciale a causa del sovraccarico di ToString(String)
?
Non ho sufficiente per una risposta in questo momento, ma ho sicuramente notato che '.ToString()' non sempre produce lo stesso risultato di incorporare un oggetto in una stringa (non ho provato se l'incorporamento è sempre lo stesso del casting in '[String]'). Quindi tutto quello che posso dire è che non è limitato a '[DateTime]'. – briantist
'.Tostring()' accetta un argomento di formato, quindi se hai bisogno di coerenza, sempre '.ToString() 'e fornisci il formato desiderato. Nel frattempo, è stato deciso che 'cast' dovrebbe semplicemente chiamare' .ToString() 'e accettare qualunque sia il suo formato predefinito. Non sono sicuro del motivo per cui lo implementerebbero in un altro modo. – johnjps111
[Probabilmente correlato] (http://stackoverflow.com/q/14359053/1630171). Sospetto che il casting utilizzi en-US come cultura predefinita in ogni caso. 'ToString()' OTOH usa la cultura corrente, come [documentato] (https://msdn.microsoft.com/en-us/library/k494fzbf%28v=vs.110%29.aspx). –