1

我正在尝试将成员引用传递给另一个方法的参数。这是一个在第一次引用时初始化的惰性加载器属性(参见Name代码示例中的属性)。目标是能够将Name属性的引用传递给GetName()方法,而无需在Get传递时对其访问器进行评估。相反,我想在堆栈中更深入地引用它,以便Get在那时触发它的访问器。

在发生 Actions 之后,我越来越接近于弄清楚这一点。在我下面的代码中,我有GetName(Function() (Name))将属性引用传递给GetName(). 在GetName()' 内,我有Name.Invoke(). 我知道这是可行的,因为我在 get 访问器中放置的断点在通过该方法时没有被触发。它仅在我调用时调用.Invoke()。但是,我需要能够将 Name 属性的值作为它返回的字符串返回,而不是仅仅触发它而不返回任何内容。

此外,虽然这是在 VB 中,但我也精通 c#,但我可能会询问有关 VB.NET 等效语法的问题。

Class TestClass

    Private _Name As String
    Private ReadOnly Property Name As String
        Get
            If _Name Is Nothing Then _Name = "Bob"
            Return _Name
        End Get
    End Property

    Sub AccessPropertyValue()

        GetName(Function() (Name))

    End Sub

    Sub GetName(Name As Action)

        Name.Invoke()

    End Sub
End Class

更新:感谢 ChaosPandion,我能够做到这一点:

Sub AccessPropertyValue()

    Dim s As String = GetName(Function() (Name))

End Sub

Function GetName(Name As Func(Of String)) As String

    Return Name.Invoke()

End Function

我希望这对其他人有帮助。

4

1 回答 1

3

您将要使用System.Func(Of String)而不是System.Action哪个是 Sub。

于 2012-08-29T21:29:04.830 回答