Как исключить статическое свойство при использовании метода GetProperties
Мне было интересно, могу ли я исключить статическое свойство, когда я использую GetProperties() для извлечения всего свойства для определенного класса. Я знаю об использовании BindingFlags для этого, чтобы отфильтровать свойства, что мне нужно, но я действительно хочу, чтобы я хотел исключить статические свойства. Я пытаюсь использовать что-то вроде этого:
typeof(<class>).GetProperties(!BindingFlags.Static);
но я не думаю, что это работает, потому что VS выдает мне некоторую синтаксическую ошибку. Вот что внутри моего класса со свойствами.
public class HospitalUploadDtl : Base.Tables
{
public HospitalUploadDtl() { }
public HospitalUploadDtl(SqlDataReader reader)
{
ReadReader(reader);
}
#region Properties
public long BatchDtlId { get; set; }
public long BatchNumber { get; set; }
public string HospitalCode { get; set; }
public string HospitalName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Country { get; set; }
public string ContractPerson { get; set; }
public string ContactNo { get; set; }
public string Email { get; set; }
public bool isAccredited { get; set; }
public bool isClinic { get; set; }
public string FaxNo { get; set; }
public string TypeofFacility { get; set; }
public string Category { get; set; }
public string Specialty { get; set; }
public string ProviderName { get; set; }
public bool CashlessInPatient { get; set; }
public bool CashlessOutPatient { get; set; }
#endregion
public static dcHospitalUploadDtl dataCtrl;
public static dcHospitalUploadDtl DataCtrl
{
get
{
if (dataCtrl == null)
dataCtrl = new dcHospitalUploadDtl();
return dataCtrl;
}
}
}
для этого сценария я хочу исключить свойство "DataCtrl" при вызове GetProperties(). Спасибо за ответ.:)
3 ответа
Я думаю, что вы ищете BindingFlags.Instance | BindingFlags.Public
(если включить только Instance
свойства не будут найдены, так как ни Public
ни NonPublic
указаны).
Вызов
typeof(<class>).GetProperties(!BindingFlags.Static);
не делает то, что вы ожидаете: значение передается в GetProperties
битовая маска, а не выражение. Внутри выражения допускаются только побитовые ИЛИ. Другими словами, вы не можете говорить то, чего не хотите: вы должны говорить, чего хотите. Так что вместо прохождения !BindingFlags.Static
ты должен пройти BindingFlags.Instance
,
Кроме того, вы можете получить все свойства, а затем применить LINQ с его богатой семантикой фильтрации, чтобы удалить ненужные элементы:
typeof(<class>).GetProperties().Where(p => !p.GetGetMethod().IsStatic).ToArray();
Вы должны использовать BindingFlags.Instance
флаг.
typeof(HospitalUploadDtl).GetProperties(BindingFlags.Instance | BindingFlags.Public);