【问题标题】:How to exclude static property when using GetProperties method使用 GetProperties 方法时如何排除静态属性
【发布时间】:2012-11-11 09:48:01
【问题描述】:

我想知道当我使用 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;
                }
            }
        }

对于这种情况,我想在调用 GetProperties() 时排除“DataCtrl”属性。感谢您的回复。 :)

【问题讨论】:

    标签: c# reflection properties static bindingflags


    【解决方案1】:

    我认为您正在寻找BindingFlags.Instance | BindingFlags.Public(如果您只包括Instance,将找不到任何属性,因为既没有指定Public,也没有指定NonPublic

    【讨论】:

      【解决方案2】:

      电话

      typeof(<class>).GetProperties(!BindingFlags.Static);
      

      不符合您的预期:传入GetProperties 的值是位掩码,而不是表达式。表达式中只允许按位或。换句话说,你不能说你不想要的东西:你必须说出你想要的东西。所以不要传递!BindingFlags.Static,你应该传递BindingFlags.Instance

      或者,您可以获取所有属性,然后应用 LINQ 及其丰富的过滤语义来删除您不需要的项目:

      typeof(<class>).GetProperties().Where(p => !p.GetGetMethod().IsStatic).ToArray();
      

      【讨论】:

        【解决方案3】:

        您应该使用BindingFlags.Instance 标志。

        typeof(HospitalUploadDtl).GetProperties(BindingFlags.Instance | BindingFlags.Public);
        

        【讨论】:

          猜你喜欢
          • 2011-01-04
          • 2022-01-03
          • 2014-02-12
          • 1970-01-01
          • 2013-09-06
          • 1970-01-01
          • 1970-01-01
          • 2015-12-22
          • 1970-01-01
          相关资源
          最近更新 更多