1

別のメソッドのパラメーターにメンバー参照を渡そうとしています。これは、最初の参照で初期化される遅延ローダー プロパティです (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

これが他の人に役立つことを願っています。

4

1 に答える 1

3

どちらがサブである かではSystem.Func(Of String)なく、使用することをお勧めします。System.Action

于 2012-08-29T21:29:04.830 に答える