我是反射的新手,我想知道如何过滤私有属性,并且还仅获取实例化的属性。我要实现的目标示例如下。
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
谢谢。
答案 0 :(得分:1)
也许是
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();
其他资源
指定用于控制绑定和搜索方式的标志 对于成员和类型,是通过反思进行的。
返回指定对象的属性值。