Vous pouvez également créer une méthode d'extension à cette fin.
public static bool TryParse(this object value, out int? parsed)
{
parsed = null;
try
{
if (value == null)
return true;
int parsedValue;
parsed = int.TryParse(value.ToString(), out parsedValue) ? (int?)parsedValue : null;
return true;
}
catch (Exception)
{
return false;
}
}
J'ai fait cette extension du type object
, mais il pourrait tout aussi bien être sur string
. Personnellement, j'aime que ces extensions d'analyseur soient disponibles sur n'importe quel objet d'où l'extension sur object
au lieu de string
.
Exemple d'utilisation:
[TestCase("1", 1)]
[TestCase("0", 0)]
[TestCase("-1", -1)]
[TestCase("2147483647", int.MaxValue)]
[TestCase("2147483648", null)]
[TestCase("-2147483648", int.MinValue)]
[TestCase("-2147483649", null)]
[TestCase("1.2", null)]
[TestCase("1 1", null)]
[TestCase("", null)]
[TestCase(null, null)]
[TestCase("not an int value", null)]
public void Should_parse_input_as_nullable_int(object input, int? expectedResult)
{
int? parsedValue;
bool parsingWasSuccessfull = input.TryParse(out parsedValue);
Assert.That(parsingWasSuccessfull);
Assert.That(parsedValue, Is.EqualTo(expectedResult));
}
L'inconvénient serait que cela rompt avec la syntaxe des cadres pour les valeurs de l'analyse;
int.TryParse(input, out output))
Mais j'aime la version plus courte de celui-ci (si elle est plus lisible ou non peut être sujet à discussion);
input.TryParse(out output)
@JonSkeet - strValue cna être null et la méthode Trim() entraînerait une exception. Je dis juste. :) –
@ShaktiPrakashSingh: Nous ne savons pas si 'strValue' pourrait être nul ou non. Si elle provient d'une zone de texte, elle ne peut probablement pas être nulle. Mon code n'essaie pas de résoudre ce problème, mais nous ne savons vraiment pas s'il doit * ou non * l'adresser. –
pourquoi ne pas inverser le 'if'? Par exemple: 'if (int.TryParse (Demande [" idParent "], out tmp)) idParent = tmp;' (sinon sa valeur nulle) – Dementic