2013-05-03 3 views
5

.NET знает много способов преобразования типов данных:Единый метод для преобразования типов данных

  • Convert -класса;
  • Функции внутри типа (Try)Parse и ToString и т. Д .;
  • Внедрение интерфейса IConvertable;
  • TypeConverter;
  • Неявный и явный оператор преобразования;
  • Я пропустил еще один?

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

Итак, мой вопрос: существует ли единый универсальный способ .NET для преобразования одного типа данных в другой, который может использовать все другие ограниченные методы?

ответ

2

Хороший, общий способ преобразования между типами - Convert.ChangeType. Вот пример того, как вы могли бы использовать его, чтобы написать общий метод преобразования:

public static TResult Convert<TResult>(IConvertible source) 
{ 
    return (TResult)System.Convert.ChangeType(source, typeof(TResult)); 
} 

Он, как и другие методы Convert, внутренне вызывает интерфейс IConvertible.

Это не будет использовать ваши другие варианты преобразования:

  • Наиболее распространенным я думаю, что было бы ToString; для этого вы можете добавить чек, чтобы узнать, TResult - string, и если да, то после соответствующих нулевых проверок просто наберите ToString.
  • С помощью отражения можно проверить:
    • TypeConverterAttribute (TypeDescriptor.GetConverter, кажется, путь оттуда)
    • (Try)Parse методы, (которые вы бы ссылаться), и
    • неявное/явное преобразование операторы (методы op_Implicit и op_Explicit, которые вы также взывают)

каждая из этих программ фай Если вы немного знаете об рефлексии, я могу разработать, если что-то окажется затруднительным.

+0

Обновлен мой ответ, чтобы обратиться к другим упомянутым методам преобразования. –

0

Вы подразумевают те, все же
Они не
Выберите подходящий

Convert Класс

Преобразует тип базы данных на другой тип базы данных.

Анализировать от строки

ToString является нанизывать

IConvertible Интерфейс

Определяет методы, которые преобразуют значение реализующего опорного или значения типа в общеязыковой среды выполнения тип, который имеет эквивалентное значение .

TypeConverter Класс

обеспечивает единый способ преобразования типов значений и к другим типам, , а также для доступа стандартных значений и субсвойства.

Да, вам необходимо знать тип, в который вы конвертируете.
И вы должны знать, относится ли тип, из которого вы конвертируете.

С дженериками нет встроенных.
В лучшем случае вы предоставляете метод.
Но зачем вам нужно конвертировать дженерики?

Вы, кажется, подразумеваете, что более одного пути - это плохая вещь.
Для одного пути мне нравится ответ от Тима С. +1
Но это не значит, что я когда-нибудь его буду использовать.

Есть еще больше способов получить данные из базы данных SQL.
Это плохая вещь?

+0

Где я подразумеваю это? –

Смежные вопросы