Как исключить статическое свойство при использовании метода 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);
Другие вопросы по тегам