Как использовать отражение C #, чтобы получить свойства, которые создаются, или свойства типа класса, которые не равны NULL - PullRequest
0 голосов
/ 11 июня 2019

Я новичок в размышлениях, я хочу знать, как отфильтровать частные свойства, а также получить только те свойства, которые были созданы.Пример того, чего я хотел бы достичь, приведен ниже.

public class PersonalDetails
{
    internal Address AddressDetails { get; set; }
    public Contact ContactDetals { get; set; }
    public List<PersonalDetails> Friends { get; set; }
    public string FirstName { get; set; }
    private int TempValue { get; set; }
    private int Id { get; set; }

    public PersonalDetails()
    {
        Id = 1;
        TempValue = 5;
    }
}

public class Address
{
    public string MailingAddress { get; set; }
    public string ResidentialAddress { get; set; }
}

public class Contact
{
    public string CellNumber { get; set; }
    public string OfficePhoneNumber { get; set; }
}

PersonalDetails pd = new PersonalDetails();
pd.FirstName = "First Name";
pd.ContactDetals = new Contact();
pd.ContactDetals.CellNumber = "666 666 666";

Когда я получаю свойства объекта pd , я хочу отфильтровать свойства, которые являются частными и не создаются, каксвойства TempValue , Id и AddressDetails

Заранее спасибо.

1 Ответ

1 голос
/ 11 июня 2019

Может быть, это

var p = new PersonalDetails();

var properties = p.GetType()
                  .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
                  .Where(x => x.GetValue(p) != null && !x.GetMethod.IsPrivate && !x.SetMethod.IsPrivate)
                  .ToList();

Дополнительные ресурсы

BindingFlags Enum

Указывает флаги, которые контролируют привязку и способ поиска для членов и типов проводится рефлексия.

PropertyInfo.GetValue Метод

Возвращает значение свойства указанного объекта.

...