Просто хотел уточнить это для себя, используя новый API отражения на основе TypeInfo
- где BindingFlags
не доступен надежно (зависит от целевой структуры).
В отражении 'new', чтобы получить статические свойства для типа (не включая базовый класс (ы)), вы должны сделать что-то вроде:
IEnumerable<PropertyInfo> props =
type.GetTypeInfo().DeclaredProperties.Where(p =>
(p.GetMethod != null && p.GetMethod.IsStatic) ||
(p.SetMethod != null && p.SetMethod.IsStatic));
Удовлетворяет свойствам только для чтения или только для записи (несмотря на то, что идея только для записи - ужасная идея).
Элемент DeclaredProperties
также не различает свойства с общедоступными / частными средствами доступа - поэтому для фильтрации вокруг видимости вам необходимо сделать это на основе средства доступа, которое вам нужно использовать. Например, при условии, что вышеуказанный вызов вернулся, вы можете сделать:
var publicStaticReadable = props.Where(p => p.GetMethod != null && p.GetMethod.IsPublic);
Есть несколько доступных ярлыков, но в конечном итоге мы все будем писать гораздо больше методов расширения для методов / свойств запроса TypeInfo
в будущем. Кроме того, новый API заставляет нас теперь думать о том, что мы считаем «частным» или «общедоступным» свойством, потому что мы должны фильтровать себя на основе отдельных методов доступа.