Comment utiliser int.TryParse avec nullable int?

J’essaie d’utiliser TryParse pour trouver si la valeur de la chaîne est un entier. Si la valeur est un entier, ignorez la boucle foreach. Voici mon code.

ssortingng strValue = "42 " if (int.TryParse(sortingm(strValue) , intVal)) == false { break; } 

intVal est une variable de type int? (INT nullable). Comment puis-je utiliser Tryparse avec nullable int?

Vous ne pouvez malheureusement pas le faire sans utiliser une autre variable, car le type des arguments sortants doit correspondre exactement au paramètre.

Comme le code de Daniel, mais corrigé en termes de second argument, de rognage, et en évitant les comparaisons avec les constantes booléennes:

 int tmp; if (!int.TryParse(strValue.Trim(), out tmp)) { break; } intVal = tmp; 

Voici une option pour un int nullable avec TryParse

 public int? TryParseNullable(ssortingng val) { int outValue; return int.TryParse(val, out outValue) ? (int?)outValue : null; } 

Je ne pouvais pas m’empêcher de produire une version générique. Utilisation ci-dessous.

  public class NullableHelper { public delegate bool TryDelegate(ssortingng s, out T result); public static bool TryParseNullable(ssortingng s, out T? result, TryDelegate tryDelegate) where T : struct { if (s == null) { result = null; return true; } T temp; bool success = tryDelegate(s, out temp); result = temp; return success; } public static T? ParseNullable(ssortingng s, TryDelegate tryDelegate) where T : struct { if (s == null) { return null; } T temp; return tryDelegate(s, out temp) ? (T?)temp : null; } } bool? answer = NullableHelper.ParseNullable(answerAsSsortingng, Boolean.TryParse); 

Vous pouvez créer une méthode d’assistance pour parsingr une valeur nullable.

Exemple d’utilisation:

 int? intVal; if( !NullableInt.TryParse( "42", out intVal ) ) { break; } 

Méthode d’aide:

 public static class NullableInt { public static bool TryParse( ssortingng text, out int? outValue ) { int parsedValue; bool success = int.TryParse( text, out parsedValue ); outValue = success ? (int?)parsedValue : null; return success; } } 

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.ToSsortingng(), out parsedValue) ? (int?)parsedValue : null; return true; } catch (Exception) { return false; } } 

J’ai fait de ceci une extension sur le type d’ object , mais il pourrait tout aussi bien être sur ssortingng . Personnellement, j’aime que ces extensions de parseur soient disponibles sur n’importe quel object, donc l’extension sur l’ object plutôt que sur la ssortingng .

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 frameworks pour parsingr les valeurs;

 int.TryParse(input, out output)) 

Mais j’aime la version plus courte de celle-ci (que ce soit plus lisible ou pas sujette à discussion);

 input.TryParse(out output)