VB.Net:将属性作为参数传递,而不将属性名称作为字符串传递?
我想访问另一个方法中的属性,而不将属性名作为字符串传递。这一要求有两个原因:VB.Net:将属性作为参数传递,而不将属性名称作为字符串传递?,.net,vb.net,properties,.net,Vb.net,Properties,我想访问另一个方法中的属性,而不将属性名作为字符串传递。这一要求有两个原因: 我无法传递属性值,因为我可能不想对其求值,而是从缓存中检索它(对于某些属性,缓存在我的设置中会更有效) 我不想将名称作为字符串传递,因为如果字符串无效,则不会引发编译时错误 经过几个小时的搜索,我还没有找到一个明确的答案(这让我怀疑是否有答案!)。到目前为止,我已经探讨了以下选项: 使用ByRef-这不允许访问属性名 使用反射-这需要将属性名作为字符串传入,我希望避免(从) 使用委托-这看起来是最可能的方法,但不支持
- 使用ByRef-这不允许访问属性名
- 使用反射-这需要将属性名作为字符串传入,我希望避免(从)
- 使用委托-这看起来是最可能的方法,但不支持属性(从)
Delegate Property FunctionName() As String
Public Function GetPropName(ByVal prop As FunctionName) As String
Return prop.Method.Name
End Function
Public Sub Test()
Dim x As New MyType()
' This should print 'Definition'
Debug.Print(GetPropName(AddressOf x.Definition))
End Sub
完全限定的问题:是否有一种方法可以将属性作为参数传递(以允许访问其名称和值的格式传递),而无需将属性名称作为字符串传递?您为什么关心名称?当然,重要的是您可以在需要时获得属性值,而不是在调用方法时。就属性值而言,您可以随心所欲,但我不确定它是否允许您访问属性名称。此类方法在ASP.NET MVC中常用,例如,能否传递System.Reflection.PropertyInfo?从中可以得到属性名。@DanVerdolino要使用此属性,我仍然需要使用字符串:
obj.GetType.GetProperty(“定义”)
@jmchilinney我需要属性名才能知道我在缓存中查找的内容。我使用属性名和对象标识符访问缓存中的每个项。