Если вы используете что-то большее, чем базовые типы (которые Convert.ChangeType
обрабатывает довольно хорошо), предпочтительный способ сделать это через TypeConverter
:
var converter = TypeDescriptor.GetConverter(type);
object val = converter.ConvertFromString(s); // note various overloads,
// or ConvertFromInvariantString
Это удобно, поскольку эта модель может быть расширена для распознавания дополнительных типов (или изменения реализации для существующих типов) как во время компиляции (добавление [TypeConverter(...)]
), так и во время выполнения (TypeDescriptor.AddAttributes(...)
).