2012-11-23 78 views
1

我想知道當我使用GetProperties()提取特定類的所有屬性時是否可以排除靜態屬性。我知道使用BindingFlags來過濾我需要的屬性,但我真正想要的是我想排除靜態屬性。我嘗試使用這樣的東西:如何使用GetProperties方法排除靜態屬性

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」屬性。感謝您的迴應。 :)

回答

4

我認爲你正在尋找BindingFlags.Instance | BindingFlags.Public(如果你只包括Instance,因爲既沒有指定Public也不NonPublic沒有屬性會被發現)。

0

您應該使用BindingFlags.Instance標誌。

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

呼叫

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

不會做你所期望的:在傳遞給GetProperties值是位掩碼,不是表達式。表達式中只允許按位或運算。換句話說,你不能說你不想要的東西:你必須說出你想要的東西。因此,您應該通過BindingFlags.Instance而不是通過!BindingFlags.Static

或者,你可以得到所有的屬性,然後應用LINQ憑藉其豐富的語義過濾去除項目不需要:

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