При получении списка свойств (через отражение) мы можем исключить свойства ReadOnly? - PullRequest
3 голосов
/ 23 марта 2012

Этот код получит нам все свойства класса:

Dim myPropertyInfo As PropertyInfo()
     = myType.GetProperties((BindingFlags.Public Or BindingFlags.Instance))

или в C #:

PropertyInfo[] myPropertyInfo
     = myType.GetProperties(BindingFlags.NonPublic|BindingFlags.Instance);

Но есть ли способ получить только свойства, определенные как ReadOnly?

Или, в равной степени, исключить свойства ReadOnly?

1 Ответ

6 голосов
/ 23 марта 2012

Просто отфильтруйте результаты с теми, которые имеют CanWrite как False

Dim items As PropertyInfo() = Me. _
  GetType(). _
  GetProperties(Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public). _
  Where(Function(x) Not x.CanWrite). _
  ToArray() _

Обратите внимание, что в приведенном выше примере кода предполагается, что Visual Studio 2008 или выше, и требуется импорт System.Linq. Если вы используете старую версию, вы можете сделать следующее

Dim props As PropertyInfo() = Me.GetType().GetProperties(Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public)
Dim readOnlyProps As New List(Of PropertyInfo)
For Each cur in props 
  If Not cur.CanWrite Then
    readOnlyProps.Add(cur)
  End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...