Question [Résolu] Bug dans les tests de typage ?

Plus d'informations
il y a 16 ans 3 mois #5696 par Madrolle

[PS] D:\dev\powershell>[string[]]

IsPublic IsSerial Name BaseType



----
True True String[] System.Array


[string[]] est donc bien un type valide !
Testons...

[PS] D:\dev\powershell>$pop='1.2.3.4','méta.soc','inf32 12','machine5'

[PS] D:\dev\powershell>$pop -is [array]
True
[PS] D:\dev\powershell>$pop[0] -is [string]
True
[PS] D:\dev\powershell>$pop[1] -is [string]
True
[PS] D:\dev\powershell>$pop[2] -is [string]
True
[PS] D:\dev\powershell>$pop[3] -is [string]
True


et Surprise !

[PS] D:\dev\powershell>$pop -is [string[]]
False


C'est déja dommage, mais même en forçant, rien à faire !

[PS] D:\dev\powershell>$pop -as [string[]]
1.2.3.4
méta.soc
inf32 12
machine5
[PS] D:\dev\powershell>$pop -is [array]
True
[PS] D:\dev\powershell>$pop -is [string[]]
False


Me suis-je trompé ?
Sinon, quel est l'endroit officiel pour signaler les bugs ?

Message édité par: Perso, à: 22/11/09 08:37<br><br>Message édité par: Arnaud, à: 24/11/09 21:35

ShellDealer sur Twitter

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 3 mois #5697 par Laurent Dardenne
Perso écrit:

Me suis-je trompé ?

Je serais tenté de te répondre non, tout est correct.
Mais tu considères ton tableau comme étant d'un certain type, ton erreur est là je pense.
Perso écrit:

et Surprise !

Normal, le type ancêtre est bien Array, mais un tableau de quoi ?
Construit ainsi $pop est un tableau d'objet.On peut y placer tout type d'objet.

Une string est aussi un objet, toujours, mais pas l'inverse. Un objet n'est pas tjr une string.

Pour le savoir on utilise l'opérateur -as, comme tu le fais.
Mais pour récupérer le résultat de l'opération, un nouvel objet avec un type plus prècis, il faut une nouvelle variable :
[code:1]$pop2=$pop -as [string[]]
$pop2 -is [string[]]
#True
$pop2.psbase -eq $null
#False
[/code:1]
Dans l'exemple suivant, le cast ne fonctionne pas :
[code:1]
$pop3=$pop -as [Double[]]
$pop3.psbase -eq $null
#True
[/code:1]
Perso écrit:

Sinon, quel est l'endroit officiel pour signaler les bugs ?

connect.microsoft.com
Il te faut un compte Windows Live (anciennement Passport).

Pour la route, par Keith Hill :
[code:1]
#Array covariance support

$arr = '127.0.0.1','192.168.1.100','192.168.1.101'
$ips = [system.net.ipaddress[]]$arr
$ips | ft IPAddressToString, AddressFamily -auto
#IPAddressToString AddressFamily
#

#127.0.0.1 InterNetwork
#192.168.1.100 InterNetwork
#192.168.1.101 InterNetwork
[/code:1]
MSDN : Covariance de tableau
[code:1]$pop4 = [string[]]$pop

$t='1.2.3.4','méta.soc',12,'machine5',5.1, (gv pop)
$t2 = [string[]]$t
$t2
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 3 mois #5698 par Madrolle
Réponse de Madrolle sur le sujet Re:bug dans les tests de typage ?
Merci, c'est plus clair !

Je note avec le dernier exemple la conversion auto des éléments en string.

ShellDealer sur Twitter

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena