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我需要属性名才能知道我在缓存中查找的内容。我使用属性名和对象标识符访问缓存中的每个项。