2013-08-02 7 views
6

मैं निम्नलिखित 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 

enter image description here

अधिक विस्तृत विवरण: मैं कुछ अप्रचलित कोड संरचनाओं का उपयोग करता है कक्षाओं के बजाय। इसलिए मुझे एक पल की पहचान करने की आवश्यकता है जब इस संरचना का दायर गलत मूल्य में बदल जाता है।

डीबग का मेरा समाधान एक ही नाम के साथ एक संपत्ति द्वारा दायर की गई संरचना को प्रतिस्थापित करना था, और फिर मैंने संपत्ति सेटर में एक ब्रेकपॉइंट सेट किया था जब मुझे गलत मूल्य प्राप्त होता है ... क्रम में सभी कोड फिर से लिखें .... बस डीबगिंग उद्देश्य के लिए।

अब, मुझे ऊपर की समस्या का सामना करना पड़ा, इसलिए मुझे नहीं पता कि क्या करना है ... केवल हर जगह ब्रेकपॉइंट सेट करना, संरचना के इस सदस्य को असाइन किया गया है, लेकिन उस असाइनमेंट के साथ बहुत सी रेखाएं हैं ...

उत्तर

6

यह केवल एक मामला है जब आप प्रोग्राम चलाते हैं तो क्या हो रहा है। गेटटर आपकी संरचना की प्रतिलिपि देता है, आप उस पर एक मूल्य निर्धारित करते हैं, फिर संरचना की वह प्रति गुंजाइश से बाहर हो जाती है (इसलिए संशोधित मान कुछ भी नहीं करता है)। कंपाइलर इसे एक त्रुटि के रूप में दिखाता है क्योंकि संभवतः यह संभव नहीं है कि आप क्या चाहते हैं। ऐसा कुछ करें:

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

बाएं काम करता है क्योंकि आप इसे किसी संपत्ति के बजाय सीधे एक्सेस कर रहे हैं।

+0

धन्यवाद, केविन। मैंने थोड़ा सा स्पष्टीकरण जोड़ा कि मैंने यह परीक्षण क्यों किया। – serhio

+0

@ सेरहियो कोई समस्या नहीं, यह ऐसा कुछ है जो संरचना प्रकारों से गुण बनाते समय हमेशा आता है (उदाहरण के लिए 'टाइमस्पेन')। आईआईआरसी यह संकलन त्रुटि नहीं होता था और बस काम नहीं करेगा, जो शायद और भी निराशाजनक था। –

+0

गेटर इस संरचना की एक प्रति देता है ... क्या मैं इसे "byref" बल दूंगा?) – serhio

संबंधित मुद्दे

 संबंधित मुद्दे