.Net Framework содержит отличный класс с именем Convert, который позволяет выполнять преобразование между простыми типами, типом DateTime и типом String. Также класс поддерживает преобразование типов, реализующих интерфейс IConvertible.
Класс был реализован в самой первой версии .Net framework. В первой платформе .Net было несколько вещей, которые были сделаны не совсем правильно. Например, методы .Parse для простых типов будут генерировать исключение, если строка не может быть проанализирована, и нет способа проверить, будет ли выброшено исключение заранее.
В будущей версии .Net Framework этот недостаток был устранен путем введения метода TryParse, который решил эту проблему.
Класс Convert восходит ко времени старого метода Parse, поэтому метод ChangeType для этого класса в реализованном старом стиле - если преобразование не может быть выполнено, возникает исключение.
Взгляните на следующий код:
public static T ConvertString<T>(string s, T @default)
{
try
{
return (T)Convert.ChangeType(s, typeof(T), CultureInfo.InvariantCulture);
}
catch (Exception)
{
return @default;
}
}
Этот код в основном делает то, что я хочу. Однако я бы очень хотел избежать здесь уродливой попытки / улова. Я уверен, что, как и в TryParse, существует современный метод переписывания этого кода без всеобщего сведения. Не могли бы вы предложить один?