我在VB.net中遇到了一些问题:我有一系列对象,我在网格中显示哪些属性供用户编辑。
我的第一个问题是:如何获取对象的所有属性列表?它甚至可能吗?我正在使用的datagrid控件接受字符串值作为参数的属性名称,但手动插入它们将是一个真正的问题,因为它们有很多。那么:有没有办法获得一个字符串列表,其中包含一个对象的每个属性的名称?
如果可能的话,第二个问题就出现了: 当然,现在,由于用户正在编辑属性,我对显示无法编辑的ReadOnly属性不感兴趣。因此我的secodn问题:有没有办法在运行时检查属性是否只读?
提前感谢您提供的任何帮助(即使它只是“无法完成”)
答案 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