.NET 4.0:如何将成员引用作为方法参数传递?

时间:2012-08-29 18:26:03

标签: .net vb.net .net-4.0

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

在发生行动之后,我越来越接近搞清楚了。在我的下面的代码中,我有代码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

我希望这有助于其他人。

1 个答案:

答案 0 :(得分:3)

您需要使用System.Func(Of String)而不是System.Action这是一个Sub。