примечание Я предполагаю, что вы имеете в виду 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>
.