J'ai une fonction J'ai besoin de savoir si la valeur après chaque Voici mon code: P > Cependant, la valeur est toujours une chaîne, ce qui a du sens puisqu'il est lu depuis une chaîne. p> Puis-je la jeter en quelque sorte au bon type? p> Je sais que je pourrais faire quelque chose comme ça, mais ce n'est pas fiable depuis par exemple, par exemple FOO code> que je veux transmettre une liste d'arguments dans ce format: = = code> est un int code>, string code> ou double (float) code>. p> 1 code> peut être tout p>
4 Réponses :
Vous pouvez tester des types limités en utilisant -As code> comme celui-ci - $val = '23.00' #input value to be type-casted
$intVal = $val -as [int]
$floatVal = $val -as [float]
if ($null -ne $floatVal -and $intVal -ne $floatVal) {
$val = $floatVal # value is float type
} elseif ($null -ne $intVal) {
$val = $intVal # value is int type
} else {
Write-output '$val is already string type' # value is not float or int, so use it as string
}
Je viens d'ajouter des instructions avec le type de coulée de type sur votre fonction.
Function foo {
Param(
[ValidateScript({ $_ -match ".*=.*" })]
[string[]]$ArgumentList
)
foreach ($Par in $ArgumentList) {
$Split = $Par -split "="
$ParamName = $Split[0]
$ParamValue = $Split[1]
if($ParamName -eq "a"){
$ParamValue = [int]$ParamValue
}
if($ParamName -eq "b"){
$ParamValue = [string]$ParamValue
}
if($ParamName -eq "c"){
$ParamValue = [double]$ParamValue
}
if ($ParamValue -is [string]) {
"2049" + $ParamName + $ParamValue
}
elseif ($ParamValue -is [int]) {
"2050" + $ParamName + $ParamValue
}
elseif ($ParamValue -is [double]) {
"2051" + $ParamName + $ParamValue
}
else {
Write-Host "Not a string, int or float."
}
}
}
merci mais les noms paramètres sont juste des exemples, je ne connais pas leurs noms à l'avenir, donc je ne peux donc pas utiliser ceci
Comme vous l'avez reconnu, vous définissez le type de chaîne lorsque vous passez la valeur à votre paramètre, il doit toujours évaluer en tant que chaîne.
Si vous définissez votre paramètre sous forme de tableau que votre fonction pourrait fonctionner. Exemple ci-dessous, Get-Member affiche les types d'objets dans la matrice. P>
Comment obtenez-vous la valeur de votre paramètre? Il peut être préférable de changer le format avant de le transmettre à votre fonction. P>
J'utiliserais simplement le type J'ai ajouté Tryparse (String, [Ref] Var) Code> Méthode. $ Paramvalue.gettype () .FullName code> pour que vous puissiez voir le type étant défini. Le [TYPE] :: Tryparse (chaîne, [réfr] $ TEMP) code> La méthode tentera de lancer la chaîne sur le type. Il retournera true code> ou false code> et stocke la valeur correspondante dans $ TEMP code>. false code> donnera une valeur 0 code> dans $ TEMP code> dans nos étuis de test. Si true code>, $ TEMP code> contiendra la valeur coulée. P> "2048" + quelqueévalue code>) que la sortie de cette expression est une chaîne code>. p> p>
Cela fonctionne parfaitement. Merci! Je sais que cela deviendra une corde à la fin, il doit juste être une chaîne avec le numéro correct devant :-).