列出属性/检查属性是否为ReadOnly

时间:2009-11-26 09:11:22

标签: .net wpf vb.net visual-studio

我在VB.net中遇到了一些问题:我有一系列对象,我在网格中显示哪些属性供用户编辑。

我的第一个问题是:如何获取对象的所有属性列表?它甚至可能吗?我正在使用的datagrid控件接受字符串值作为参数的属性名称,但手动插入它们将是一个真正的问题,因为它们有很多。那么:有没有办法获得一个字符串列表,其中包含一个对象的每个属性的名称?

如果可能的话,第二个问题就出现了: 当然,现在,由于用户正在编辑属性,我对显示无法编辑的ReadOnly属性不感兴趣。因此我的secodn问题:有没有办法在运行时检查属性是否只读?

提前感谢您提供的任何帮助(即使它只是“无法完成”)

2 个答案:

答案 0 :(得分:3)

你可以用反射做到这一点。使用foo.GetType()获取特定对象的类型。然后使用Type.GetProperties()查找所有属性。对于每个属性,您可以使用PropertyInfo.CanWrite找出它是否可写。

这是一个简单的例子:

Option Strict On
Imports System
Imports System.Reflection

Public class Sample

    ReadOnly Property Foo As String
       Get
           Return "Foo!"
       End Get
    End Property

    Property Bar As String
       Get
           Return "Ar!"
       End Get
       Set
           ' Ignored in sample
       End Set
    End Property

End Class

Public Class Test

   Public Shared Sub Main()
       Dim s As Sample = New Sample()

       Dim t As Type = s.GetType()
       For Each prop As PropertyInfo in t.GetProperties
           Console.WriteLine(prop.Name)
           If Not prop.CanWrite
               Console.WriteLine("   (Read only)")
           End If
       Next prop
   End Sub

End Class

答案 1 :(得分:0)

以下是您在MyObject中循环播放属性的方法。正如Jon Skeet所说,检查CanWrite以帮助您解决问题的第二部分:

Dim MyProperties As System.Reflection.PropertyInfo() = MyObject.GetType().GetProperties()
For Each prop As System.Reflection.PropertyInfo In MyProperties
    If prop.CanWrite Then
        //do stuff
    End If
Next