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

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

Время на прочтение2 мин
Количество просмотров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...).

Ссылки


» Проект на гитхабе
Теги:
Хабы:
Всего голосов 12: ↑8 и ↓4+4
Комментарии9

Публикации

Истории

Работа

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

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

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань