0x49D1

0L4g0YDQsNC30YDQsNCx0L7RgtC60LUsINC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60L7QsiA=

Конвертирование типов c применением TypeDescriptor


Статья совершенно не про SQLCELogViewer =)
Случайно наткнулся на то, что писал по поводу конвертаций Скотт Хансельман и решил сделать вольный перевод, потому что проблема достаточно распространенная(не такая, конечно, как вездесущее написание СОБСТВЕННЫХ методов сортировки(пузырьком) из-за незнания того, что есть(в любом достойном фреймворке) стандартный метод).
Наверное все видели код типа:

type = typeof(T);
if (type == typeof(Boolean))
{
    returnValue = (T)((object)Convert.ToBoolean(value));
}
else if (type == typeof(String))
{
    returnValue = (T)((object)value);
}
else if (type == typeof(Int16))
{
    returnValue = (T)((object)Convert.ToInt16(value));
}
else if (type == typeof(Int32))
{
    returnValue = (T)((object)Convert.ToInt32(value));
}
//...and on and on for a dozen+ types

и он работает и почти все хорошо, кроме того, что чувство прекрасного думает, что над ним надругались.
Так вот не все знают, что этот кусок можно заменить этим методом, использующим статический класс TypeDescriptor, а затем приводящий строковое представление к соответствующему типу:

public static T GetTfromString(string mystring)
{
   var foo = TypeDescriptor.GetConverter(typeof(T));
   return (T)(foo.ConvertFromInvariantString(mystring));
}

И использовать его так:

bool b = GetTfromString("true");

Так же есть и много стандартных конверторов, которые вы вероятно используете в XAML или гридах:
много стандартных конверторов

Реклама