8

次の 2 つの構造がありますが、2 番目の構造が機能しない理由がよくわかりません。

Module Module1    
  Sub Main()
    Dim myHuman As HumanStruct
    myHuman.Left.Length = 70
    myHuman.Right.Length = 70

    Dim myHuman1 As HumanStruct1
    myHuman1.Left.Length = 70
    myHuman1.Right.Length = 70    
  End Sub

  Structure HandStruct
    Dim Length As Integer
  End Structure

  Structure HumanStruct
    Dim Left As HandStruct
    Dim Right As HandStruct
  End Structure

  Structure HumanStruct1
    Dim Left As HandStruct
    Private _Right As HandStruct
    Public Property Right As HandStruct
      Get
        Return _Right
      End Get
      Set(value As HandStruct)
        _Right = value
      End Set
    End Property    
  End Structure    
End Module

ここに画像の説明を入力

より詳細な説明:クラスの代わりに構造体を使用する古いコードがあります。したがって、この構造のフィールドが間違った値に変化する瞬間を特定する必要があります。

デバッグするための私の解決策は、プロパティによってファイルされた構造を同じ名前に置き換えることでした。次に、プロパティセッターにブレークポイントを設定して、間違った値を受け取った瞬間を特定しました...すべてのコードを書き直さないために....デバッグ目的のためだけに。

今、私は上記の問題に直面したので、どうすればよいかわかりません...構造体のこのメンバーが割り当てられているすべての場所にブレークポイントを設定するだけですが、その割り当てには多くの行があります...

4

1 に答える 1

9

プログラムを実行したときに何が起こっているかだけの問題です。ゲッターは構造体のコピーを返し、それに値を設定すると、その構造体のコピーはスコープ外になります (したがって、変更された値は何もしません)。おそらく意図したものではないため、コンパイラはこれをエラーとして表示します。次のようにします。

Dim tempRightHand as HandStruct
tempRightHand = myHuman.Right
tempRightHand.Length = 70
myHuman.Right = tempRightHand

プロパティを介してではなく直接アクセスしているため、左側が機能します。

于 2013-08-02T16:27:34.650 に答える