Имеет ли смысл Convert.ChangeType () со строковым значением? - PullRequest
3 голосов
/ 24 мая 2011

Я нашел этот замечательный пост @ hugoware о разборе значений: http://hugoware.net/blog/more-control-when-parsing-values. Я повторно использовал его пример кода в проекте, но теперь я заметил в последнем блоке (строка 154 его code) он использует метод Convert.ChangeType () в качестве последней попытки «преобразовать» значение.

Теперь мне интересно, имеет ли это смысл, поскольку мы всегда начинаем со строкового значения, и я предполагаю, что Convert.ChangeType выполняет приведение только к типам значений? Есть ли смысл попробовать это или это всегда будет неудачей?

Ответы [ 2 ]

10 голосов
/ 24 мая 2011

Если вы просто хотите преобразовать строки, я советую вам использовать ConvertToString / ConvertFromString

 TypeConverter converter = TypeDescriptor.GetConverter(type);
 string res = converter.ConvertToString(obj);
 object original = converter.ConvertFromString(res);

-

1 голос
/ 24 мая 2011

вы можете использовать Convert.ChangeType () со строками. См. Документацию MSDN: ChangeType

Из MSDN:

string s = "12/12/98";
DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));

В приведенном выше случае преобразование из строки имеет смысл.

Используя этот метод, я полагаю, можно расширить его, чтобы справиться с нестроковыми значениями, например

private static bool _PerformConvert<T,U>( U value, ref T result )
{
    object convert = Convert.ChangeType(value, typeof(U) );
    // Continue ...
}

Возможно, имеет смысл иметь возможность преобразовывать любое значение, например, если у вас был интерфейс к сторонней dll, которая предоставляла числовое представление объекта (это произошло!), Вы могли бы использовать более общую версию кода для преобразования между сторонним представлением и другим представлением, которое имеет больше смысла для вашего кода.

...