Pertanyaan Properti dalam Struktur: "Ekspresi adalah nilai dan karena itu tidak dapat menjadi target tugas."


Saya memiliki 2 struktur berikut, dan saya tidak begitu mengerti mengapa yang kedua tidak berfungsi:

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

enter image description here

Penjelasan lebih detail: Saya memiliki beberapa kode usang yang menggunakan struktur bukan kelas. Jadi saya perlu mengidentifikasi suatu saat ketika sebuah arsip dari struktur ini berubah ke nilai yang salah.

Solusi saya untuk debug adalah untuk mengganti struktur yang diajukan oleh properti dengan nama yang sama, dan kemudian saya hanya menetapkan breackpoint di setter properti untuk mengidentifikasi saat ketika saya menerima nilai yang salah ... agar tidak menulis ulang semua kode .... hanya untuk tujuan debugging.

Sekarang, saya menghadapi masalah di atas, jadi saya tidak tahu apa yang harus dilakukan ... hanya mengatur breakpoint di mana-mana anggota struktur ini ditugaskan, tetapi ada banyak garis dengan tugas itu ...


6
2017-08-02 16:24


asal


Jawaban:


Ini hanya masalah apa yang terjadi ketika Anda menjalankan program. The pengambil mengembalikan salinan dari struct Anda, Anda menetapkan nilai pada itu, maka salinan dari struct keluar dari ruang lingkup (jadi nilai yang dimodifikasi tidak melakukan apa-apa). Compiler menunjukkan ini sebagai kesalahan karena mungkin bukan yang Anda maksudkan. Lakukan sesuatu seperti ini:

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

Karya kiri karena Anda mengaksesnya secara langsung alih-alih melalui properti.


6
2017-08-02 16:27