1

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" プロパティを除外します。返信ありがとうございます。:)

4

3 に答える 3

7

あなたが探していると思いますBindingFlags.Instance | BindingFlags.Public( のみを含める場合、どちらも指定されInstanceていないため、プロパティは見つかりません)。PublicNonPublic

于 2012-11-23T01:38:42.950 に答える
1

呼び出し

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

期待どおりに動作しません: に渡された値GetPropertiesビット マスクであり、式ではありません。式内では、ビットごとの OR のみが許可されます。言い換えれば、自分が望まないことを言うことはできません。自分が本当に望んでいることを言わなければなりません。したがって、渡す代わりに を渡す!BindingFlags.Static必要がありBindingFlags.Instanceます。

または、すべてのプロパティを取得してから、豊富なフィルター セマンティックを備えた LINQ を適用して、不要な項目を削除することもできます。

typeof(<class>).GetProperties().Where(p => !p.GetGetMethod().IsStatic).ToArray();
于 2012-11-23T01:41:36.197 に答える
0

BindingFlags.Instanceフラグを使用する必要があります。

typeof(HospitalUploadDtl).GetProperties(BindingFlags.Instance | BindingFlags.Public);
于 2012-11-23T01:37:30.130 に答える