Bar*_*ing 1 vb.net reflection types properties
我有一个要求,我需要一种"类型安全"的方式来访问属性名称,而不实际实例化一个对象来获取属性.举一个例子,考虑一个方法,该方法将IMyObject列表作为参数,并使用表示属性名称的字符串(IMyObject中存在的属性).
方法实现将获取列表并使用传递的属性名称访问列表中的所有对象...出于某种原因,我们将不再详述!
现在,我知道您可以使用实例化对象来执行此操作,例如...
Dim x as MyObject = nothing
Dim prop As PropertyInfo = PropHelper.GetProperty(Of MyObject)(Function() x.MyProperty)
Run Code Online (Sandbox Code Playgroud)
我的帮助方法使用反射来获取属性的名称作为字符串 - 有很多例子在网上飞来飞去!
但我不想创建这个毫无意义的对象,我只想做像MyObject.MyProperty这样的事情!Reflection允许您在不声明该类型的对象的情况下迭代类型属性和方法...但我想访问特定属性并检索其名称的字符串版本而不进行迭代,并且不声明该类型的对象!
这里的要点是虽然我试图将属性名称作为字符串...这是在运行时完成的...在编译时,我希望这是类型安全的,所以如果有人更改属性名称,编译将破裂.
任何人都可以帮忙完成这个任务!?!
所以这是一个快速的代码清单,以展示我正在寻找的答案:
Imports System.Linq.Expressions
Public Class A
Public Prop1 As String
Public Prop2 As Integer
End Class
Public Class Form1
Public Function GetPropertyNameB(Of TModel, TProperty)(ByVal [property] As Expression(Of Func(Of TModel, TProperty))) As String
Dim memberExpression As MemberExpression = DirectCast([property].Body, MemberExpression)
Return memberExpression.Member.Name
End Function
Public Sub New()
InitializeComponent()
Dim propertyName As String = GetPropertyNameB(Function(myObj As A) myObj.Prop1)
Dim propertyName2 As String = GetPropertyNameB(Function(myObj As A) myObj.Prop2)
MsgBox(propertyName & " | " & propertyName2)
End
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3462 次 |
| 最近记录: |