Не могу понять работу метода PropertyInfo.GetValue()
.
Мне было необходимо проверить все свойства объекта customerOb
(см. код ниже) на null
и вернуть true
в случае успеха. Я это сделал, используя данный пост, но не могу понять это самое "как" все работает.
public class Customer
{
public string Surname { get; set; }
public string Name { get; set; }
public CustomerEdit CustomerEdit { get; set; }
}
class Program
{
static void Main()
{
var custumerOb = new Customer();
var isAllPropertiesNull = custumerOb.GetType()
.GetProperties()
.Select(pi => pi.GetValue(custumerOb))
.All(p => p == null);
}
}
Значит:
custumerOb.GetType() - это понятно
.GetProperties() - это понятно
.Select(pi => pi.GetValue(custumerOb)) - это НЕ понятно
Было бы понятно если GetValue()
не принимал параметр:
.Select(pi => pi.GetValue())
А то мы как бы получаем очередное свойство pi
и чтобы узнать его значение передаем в (его) метод GetValue()
объект чьим свойством он является.
Я запутался. Объясните пожалуйста выражение .Select(pi => pi.GetValue(custumerOb))
. Что конкретно тут происходит?
Сначала мы получаем тип объекта: custumerOb.GetType()
.
Потом мы получаем все properties
, описанные в этом типе: GetProperties()
. Это вернет нам массив объектов класса PropertyInfo
. Они относятся к описанию класса Customer
, но не к экземпляру этого класса customerOb
.
У класса PropertyInfo
есть метод GetValue
. Но мы же не можем просто получить значение свойства идя от описания класса, в котором описано это свойство. Мы должны сказать, значение свойства какого экземпляра этого класса мы хотим получить. Для этого мы и передаем в этот метод конкретный экземпляр класса: customerOb
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Почему не вызывается Globalasax -> Application_Start при замене myapp
Есть dataTableПеребираю строки с помощью foreach