簡體   English   中英

如何使用C#反射獲取實例化的屬性或不為null的類類型的屬性

[英]How to use C# reflection to get properties that are instantiated or properties of a class type that are not null

我是反射的新手,我想知道如何過濾私有屬性,並且還僅獲取實例化的屬性。 我想要實現的示例如下。

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的屬性時,我想過濾掉私有的且未實例化的屬性,例如TempValueIdAddressDetails屬性

提前致謝。

也許這個

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枚舉

指定用於控制綁定的標志以及通過反射進行成員和類型搜索的方式。

PropertyInfo.GetValue方法

返回指定對象的屬性值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM