通过反射获取属性列表时,我们能否排除只读属性?

4

这段代码将获取类的所有属性:

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

或者使用C#:

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

有没有一种方法只获取定义为ReadOnly的属性?

或者,同样地,排除只读属性?

1个回答

7

只需过滤结果,选择 CanWriteFalse 的内容。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接