我正在尝试将成员引用传递给另一个方法的参数。它是一个惰性加载器属性,在第一个引用时初始化(请参阅代码示例中的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
我希望这有助于其他人。
答案 0 :(得分:3)
您需要使用System.Func(Of String)
而不是System.Action
这是一个Sub。