Fieldinfo.FieldType.FullName не предоставляет тип данных для datetime и double - PullRequest
1 голос
/ 03 сентября 2010

Я использую Fieldinfo.FieldType.FullName, чтобы получить тип данных поля.Для строки я получаю System.String, но для Double я получаю

System.Nullable`1 [[System.Double, mscorlib, Версия = 2.0.0.0, Культура = Нейтральный, PublicKeyToken = b77a5c561934e089]

аналогично для DateTime я получаю System.Nullable`1 [[System.DateTime, mscorlib, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089]]

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

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 03 сентября 2010

Ответ ДжаредПара - хорошее объяснение. Для решения попробуйте:

Type fieldType = fieldInfo.FieldType;
if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Nullable<>))
    fieldType = fieldType.GetGenericArguments()[0];

Теперь вы можете просто сказать:

if (fieldType == typeof(double))
    ...

и т.д.. Этот код в основном «отменяет» семантику обнуляемого типа.

1 голос
/ 03 сентября 2010

Проблема здесь в том, что рассматриваемое поле на самом деле является double? и DateTime?, а не простым старым double / DateTime.? в конце имени типа является сокращением для полного имени Nullable<double>, которое не совпадает с double.

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

  • Сделать тип поля на самом деле double вместо double?
  • Выполнить действие, если тип double или double?.
...