También puede hacer un método de extensión para este propósito;
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;
}
}
que he hecho esta una extensión del tipo object
, pero podría ser igualmente bien en string
. Personalmente, me gusta que estas extensiones de analizador estén disponibles en cualquier objeto, de ahí la extensión en object
en lugar de string
.
Ejemplo de uso:
[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));
}
El inconveniente sería que esto rompe con la sintaxis marcos para analizar los valores;
int.TryParse(input, out output))
pero me gusta la versión más corta de la misma (ya sea más legible o no ser objeto de discusión);
input.TryParse(out output)
@JonSkeet - strValue cna be null y el método Trim() daría lugar a una excepción. Solo digo. :) –
@ShaktiPrakashSingh: No sabemos si 'strValue' podría ser nulo o no. Si proviene de un cuadro de texto, probablemente * no * puede ser nulo. Mi código no intenta abordar esto, pero realmente no sé si * debería * abordarlo o no. –
¿por qué no invierte el 'si'? por ejemplo: 'if (int.TryParse (Request [" idParent "], out tmp)) idParent = tmp;' (de lo contrario es nulo) – Dementic