Как получить значение внутреннего свойства по отражению - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу использовать отражение, чтобы получить значение из объекта класса. В этом случае рейтинг - это мой основной класс, который содержит свойство класса Contribution.

Ниже приведена структура моего класса

public class Rating
{
    public string personal_client_id { get; set; }
    public string risk_benefit_id { get; set; }
    public string type { get; set; }
    public string risk_event { get; set; }
    public string value { get; set; }

    public Contribution contribution { get; set; }

}

public class Contribution
{
    public string from { get; set; }
    public string value { get; set; }
}

Теперь я хочу получить значение из вклада. свойство, как показано ниже.

var Rating = RatingObject.Where(x => x.personal_client_id == pcid).FirstOrDefault();
if (Rating  != null)
{
    Type type = Rating.GetType();
    PropertyInfo propertyInfo = type.GetProperty("contribution");
    var aa = propertyInfo.GetValue(Rating, null);

    //aa has the Contribution property now but i don't know how can i get the property value from 
   this object
   //Remember i dont want to do this **((Contribution)(aa)).from**

}
else
{
    return "";
}

Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Поскольку у вас уже есть объект rating, вы можете определить PropertyInfo для свойства, которое вы хотите прочитать из типа Contribuition, и использовать ссылку на rating.contribution для его чтения. Для образца

PropertyInfo propertyInfo = typeof(Rating).GetProperty("contribution");
var contribution = propertyInfo.GetValue(rating, null) as Contribution;

if (contribution != null)
{
   Console.WriteLine(contribution.from);
   Console.WriteLine(contribution.value);
}

Помните, что метод PropertyInfo.GetValue возвращает что-то типа object, поэтому вы должны привести его к ожидаемому типу.

0 голосов
/ 01 ноября 2019

Вместо использования var вы можете сделать тип aa динамическим.

dynamic aa = propertyInfo.GetValue(Rating, null);
return aa.from;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...