我上课了 .
Public Class Foo
Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Private _Age As String
Public Property Age() As String
Get
Return _Age
End Get
Set(ByVal value As String)
_Age = value
End Set
End Property
Private _ContactNumber As String
Public Property ContactNumber() As String
Get
Return _ContactNumber
End Get
Set(ByVal value As String)
_ContactNumber = value
End Set
End Property
End Class
我想循环上面的类的属性 . 例如;
Public Sub DisplayAll(ByVal Someobject As Foo)
For Each _Property As something In Someobject.Properties
Console.WriteLine(_Property.Name & "=" & _Property.value)
Next
End Sub
7 回答
我就是这样做的 .
这是使用LINQ lambda执行此操作的另一种方法:
C#:
VB.NET:
请注意,如果您正在谈论的对象具有自定义属性模型(例如
DataTable
的DataRowView
等),则需要使用TypeDescriptor
;好消息是这对常规课程仍然有效(甚至可以是much quicker than reflection):这样还可以轻松访问
TypeConverter
之类的内容以进行格式化:使用反射:
编辑:您还可以将_BindingFlags值指定为
type.GetProperties()
:这会将返回的属性限制为公共实例属性(不包括静态属性,受保护的属性等) .
您不需要指定
BindingFlags.GetProperty
,在调用type.InvokeMember()
以获取属性值时使用它 .Brannon给出的VB版C#:
使用绑定标志而不是第3行
反思非常“沉重”
也许尝试这个解决方案:// C#
“VB.Net
反射速度减慢/ - 1000 x方法调用的速度,如The Performance of Everyday Things所示
我使用上面的代码块重置我的Web用户控件对象中的所有字符串属性,这些属性的名称以“Doc”开头 .