Вы также можете сделать способ расширения для этой цели;
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;
}
}
Я сделал это расширение на object
типа, но он может одинаково хорошо быть на string
. Лично мне нравятся эти расширители парсеров, чтобы быть доступными на любом объекте, следовательно, расширение на object
вместо string
.
Пример использования:
[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));
}
Минусом будет то, что это нарушает с синтаксисом рамок для разбора значений;
int.TryParse(input, out output))
Но мне нравится сокращенный вариант этого (будь то более удобным для чтения или не может быть предметом обсуждения);
input.TryParse(out output)
@JonSkeet - strValue cna be null, а метод Trim() приведет к исключению. Просто говорю. :) –
@ShaktiPrakashSingh: Мы не знаем, может ли 'strValue' быть нулевым или нет. Если он исходит из текстового поля, он, вероятно, * не может * быть нулевым. Мой код не пытается решить эту проблему, но мы действительно не знаем, должен ли он * указывать его. –
Почему бы не обратить вспять 'if'? например: 'if (int.TryParse (Request [" idParent "], out tmp)) idParent = tmp;' (в противном случае его значение null) – Dementic