2013-08-02 20 views
6

Tôi có 2 cấu trúc sau đây, và tôi thực sự không hiểu tại sao một giây không hoạt động:Thuộc tính trong cấu trúc: "Biểu thức là một giá trị và do đó không thể là mục tiêu của bài tập."

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

lời giải thích chi tiết hơn: Tôi có một số mã lỗi thời mà sử dụng cấu trúc thay vì các lớp học. Vì vậy, tôi cần phải xác định một thời điểm khi một đệ trình của cấu trúc này thay đổi thành giá trị sai.

Giải pháp của tôi để gỡ lỗi là thay thế cấu trúc được đệ trình bởi một thuộc tính có cùng tên, và sau đó tôi chỉ đặt một điểm breackpoint trong trình thiết lập thuộc tính để xác định thời điểm khi tôi nhận được giá trị sai ... viết lại tất cả các mã .... chỉ cho mục đích gỡ lỗi.

Bây giờ, tôi phải đối mặt với vấn đề ở trên, vì vậy tôi không biết phải làm gì ... chỉ thiết lập điểm ngắt ở khắp mọi nơi thành viên cấu trúc này được chỉ định, nhưng có rất nhiều dòng với nhiệm vụ đó ...

Trả lời

6

Nó chỉ là vấn đề của những gì đang xảy ra khi bạn chạy chương trình. Getter trả về một bản sao của struct của bạn, bạn thiết lập một giá trị trên nó, sau đó bản sao của struct đó nằm ngoài phạm vi (vì vậy giá trị sửa đổi không làm bất cứ điều gì). Trình biên dịch cho thấy đây là một lỗi vì nó có lẽ không phải là những gì bạn dự định. Làm điều gì đó như sau:

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

Tác phẩm còn lại vì bạn đang truy cập trực tiếp thay vì thông qua tài sản.

+0

cảm ơn, Kevin. Tôi đã thêm một chút giải thích tại sao tôi lại làm bài kiểm tra này. – serhio

+0

@ serhio Không có vấn đề gì, đó là thứ luôn luôn xuất hiện khi tạo các thuộc tính ngoài các kiểu struct (ví dụ như 'TimeSpan'). IIRC nó được sử dụng để không phải là một lỗi biên dịch và sẽ chỉ đơn giản là không làm việc, mà có lẽ thậm chí còn bực bội hơn. –

+0

getter trả về một bản sao của cấu trúc này ... tôi có thể ép buộc nó "byref" không?) – serhio

Các vấn đề liên quan