Отражение - проверяет, что все nullable свойства имеют значения

Я должен циклично выполниться через все свойства в нескольких классах и проверить любые 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
    }
}
18
задан Joeppie 13 May 2014 в 08:46
поделиться

2 ответа

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

31
ответ дан 30 November 2019 в 07:55
поделиться

Поскольку вы установили, что свойство имеет тип Nullable <что-то> , вы знаете его значение имеет свойство Hasvalue - так что найдите это свойство Отражением и получим его ценность.

0
ответ дан 30 November 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: