Ответ 1
note Я предполагаю, что вы имеете в виду Nullable<T>
; если вы имеете в виду Nullable<T>
или ссылку, то у вас уже есть: object
(от GetValue
) - просто проверьте null
.
В случае Nullable<T>
; вы не можете использовать один не общий тип (кроме object
), но вам не нужно; просто проверьте, что это не null
, так как пустая Nullable<T>
помещается в поле null
, а GetValue
возвращает object
(следовательно, она меняет значение).
if(Nullable.GetUnderlyingType(propInfo.PropertyType) != null) {
// it is a Nullable<T> for some T
if(propInfo.GetValue(this, null) != null) {
// it has a value (it isn't an empty Nullable<T>)
}
}
Чтобы уточнить, Nullable
- это статический класс утилиты, который полностью разделен на структуру Nullable<T>
; поэтому вы вообще не набрасываетесь на Nullable
. Как это бывает, существует Nullable
, чтобы обеспечить такие функции, как GetUnderlyingType
, который поможет вам работать с Nullable<T>
.