Я должен циклично выполниться через все свойства в нескольких классах и проверить любые nullable свойства, чтобы видеть, есть ли у них значение. Как я бросаю значение, возвращенное от propertyInfo. GetValue () к универсальному nullable типу так, чтобы я мог проверить свойство HasValue?
Код отрезал для краткости:
foreach (PropertyInfo propInfo in this.GetType().GetProperties())
{
if (<Snip: Check to see that this is a nullable type>)
{
//How do i cast this properly in here to allow me to do:
if(!((Nullable)propInfo.GetValue(this, null)).HasValue)
//More code here
}
}
Примечание Я предполагаю, что вы имеете в виду Nullable
; если вы имеете в виду Nullable
или ссылку, то она у вас уже есть: объект
(из GetValue
) - просто проверьте null
.
В случае Nullable
; нельзя приводить к одному негенерному типу (кроме объекта
) - но это не нужно; просто проверьте, что это не null
, так как пустой Nullable
помечен в null
, а GetValue
возвращает объект
(отсюда и значение).
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
структуру; поэтому вы вообще не приводите к Nullable
. Как это происходит, Nullable
существует для обеспечения таких вещей, как GetUnderlyingType
, который помогает вам работать с Nullable
.
Поскольку вы установили, что свойство имеет тип Nullable <что-то>
, вы знаете его значение имеет свойство Hasvalue
- так что найдите это свойство Отражением и получим его ценность.