Как стать автором
Обновить

Преобразование типов значений в .NET

Время на прочтение2 мин
Количество просмотров6.7K

Введение в проблему


Казалось бы, такая простая тема, как преобразование типов значений (value conversion), не достойна целой статьи. В C# есть подходящий оператор "(T)value", есть типы, которые его реализуют, и тему на этом можно считать закрытой. Но за 14 лет существования .NET разработчики BCL и другие программисты придумали еще 4 способа преобразовывать типы значений.



Вот их список:

  1. System.Convert class;
  2. IConvertible interface;
  3. System.ComponentModel.TypeConverter;
  4. To, From, Parse, Create methods.

В добавок к этому существуют мета-типы Nullable[T], System.Enum, у которых свои методы преобразования типов значений.

И у всего этого разнообразия методов не было одного удобного API, чтобы преобразовать A→B, не думая о том, каким способом разработчик реализовал возможность этого преобразования.

Решение


Класс TypeConvert в пространстве имен System (да, я знаю, что засорять чужие неймспейсы плохо).

ToType Convert<FromType, ToType>(FromType value, string format, IFormatProvider formatProvider)

Преобразует тип значения из FromType в ToType, опционально используя format и настройки форматирования formatProvider. Если подходящих методов, принимающих настройки форматирования, нет, то будет вызван вариант без учета форматирования.

В README файле есть описание других методов.

Установка


Всё это лежит в одном файле, который можно забрать к себе в проект и в удобном Nuget-пакете:

Install-Package TypeConvert 

В нагрузку к Nuget-пакету идут 2 класса:

TypeActivator — создание экземпляров типа через закешированный конструктор,
HexConvert — преобразование байтов/чисел в hexadecimal представление и обратно.

Применение


В проекте ConsoleApp.CommandLine для биндинга передаваемых параметров неизвестного типа к известным параметрам метода.

В приватных проектах для преобразования значений конфигурации полученной из JSON к конкретным сложным типам (Uri, IpAddress, TimeSpan...).

Ссылки


» Проект на гитхабе
Теги:
Хабы:
+4
Комментарии9

Публикации

Изменить настройки темы

Истории

Работа

.NET разработчик
72 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн