Причина этого сбоя заключается в том, что info
является PropertyInfo
, представляющим свойство с именем Segment
, принадлежащее типу Entity
.(Предполагая, что Entity
имеет такое свойство. Если это не так, info
имеет значение null.)
Чтобы получить значение этого свойства, необходим экземпляр Entity
, например:
var value = info.GetValue(instanceOfEntity).ToString();
Вместо этого вы пытаетесь прочитать свойство Segment
из Entity
из Type
.
var value = info.GetValue(type).ToString();
Вы пытаетесь прочитать свойство одного класса (Segment
) из экземпляра другого свойства (Type
.) Даже если у Type
было свойство с именем Segment
itне будет работать, потому что info
является свойством Entity
и может быть прочитано только из экземпляра Entity
.
В вашем методе нет экземпляра Entity
.Возникает вопрос: с чего вы пытаетесь прочитать собственность?Если метод выглядел так:
public virtual Domains.Vegetable.Result Get<T>(T entity) where T: Domains.Vegetable.Entity
{
var type = typeof(T);
var info = type.GetProperty("Segment");
var value = info.GetValue(entity).ToString(); // throws exception
// other stuff
}
, тогда отражение могло бы работать, предполагая, что свойство существует.Но если бы собственность существовала, вы бы просто сделали это:
public virtual Domains.Vegetable.Result Get<T>(T entity) where T: Domains.Vegetable.Entity
{
var value = entity.Segment.ToString(); // throws exception
// other stuff
}
Но это не относится к делу.Вы получаете исключение, потому что вы пытаетесь прочитать свойство из одного класса в экземпляре другого класса.