我試圖只獲取某個類型的受保護屬性和公共屬性。這就是我目前正在做的如何通過c中的反射獲得受保護和公共屬性的唯一類型
var type = typeof(AClass);
var propertyInfo = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
但我想只過濾掉私人和內部屬性的公共和受保護的屬性。
有關如何去做這件事的任何建議?
我試圖只獲取某個類型的受保護屬性和公共屬性。這就是我目前正在做的如何通過c中的反射獲得受保護和公共屬性的唯一類型
var type = typeof(AClass);
var propertyInfo = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
但我想只過濾掉私人和內部屬性的公共和受保護的屬性。
有關如何去做這件事的任何建議?
請注意,屬性包含get和set方法,並且它們可以具有不同的可訪問性(即,可以是公共的,其他可以被保護等)。此外,getter或setter可能會丟失(只能獲取或僅設置屬性)。爲了獲得性能無論哪裏獲取或設置方法得到保護,你可以這樣做:
typeof(AClass).GetProperties(BindingFlags.Instance | BindingFlags.NonPublic)
.Where(c => c.GetMethod != null && c.GetMethod.IsFamily || c.SetMethod != null && c.SetMethod.IsFamily).ToArray();
我也刪除BindingFlags.Public
,但不是必需的 - 將很好地工作這一點。
如果你想獲得保護和公共屬性,只是修改了一下:
typeof(AClass).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(c => (c.GetMethod != null && (c.GetMethod.IsPublic || c.GetMethod.IsFamily)) || (c.SetMethod != null && (c.SetMethod.IsPublic || c.SetMethod.IsFamily))).ToArray();
試試這個..
PropertyInfo[] props = someType.BaseType.GetProperties(
BindingFlags.NonPublic | BindingFlags.Public
| BindingFlags.Instance | BindingFlags.Static)
它將給定類型SOMETYPE的(公共+私有/保護/內部,靜態+實例)工作(也許使用的GetType()來獲取SOMETYPE)
只得到保護:
var type = typeof(T);
var properties = type.GetProperties(BindingFlags.NonPublic);
var protectedOnly = properties.Where(info => info.GetMethod.IsFamily);
您的解決方案讓我走上了正軌。所以我正在投票。對原來的困惑抱歉。再次感謝。 – Anwuna
沒問題,很樂意幫忙。 –
擺脫BindingFlags.Public'的'。 – theB
@theB對不起,我修改了我的問題,我想得到保護和公共屬性的類型,但不是內部和私人。 – Anwuna
您應該清楚自己想要做的是什麼,而不是通過在發佈答案後修改您的帖子來修改和無效答案。 – Rahul