2014-03-29 2 views
0

구조체를 노드로 갖는 linkedlist를 생성하는 프로그램을 만들고 있습니다. 특정 시점에서 특정 노드 (구조) 내부에서 일부 값을 변경해야합니다. 다음은 몇 가지 코드입니다.linkedlistnode의 값을 편집하는 방법

Structure tp 
    Dim a as double 
    Dim b as integer 
End Structure 

Sub main() 
    Dim lst as new LinkedList(of tp) 
    Dim node as tp 
    node.a = 10.1 
    node.b = 1 
    lst.addfirst(node) 

    '...... 
    ' Now I want to change the value of first node 
    lst.first.value.a = 2 
    ' But I get "Expression is a value and therefore cannot be the target of an assignment." 

End Sub 

어떻게 수정합니까?

답변

2

해결책은 간단하다 - 클래스와 구조를 대체하고 그에 따라 사용량을 조절 : 오히려,

Class tp 
    Public a As Double 
    Public b As Integer 
End Class 

Sub main() 
    Dim lst As New LinkedList(Of tp) 
    Dim node As New tp 
    node.a = 10.1 
    node.b = 1 
    lst.AddFirst(node) 
    lst.First.Value.a = 2 
End Sub 

문제는 구조 클래스와는 달리, 값에 의해 전달되는 것이 었습니다, 값은 객체의 복사본을 반환 있도록 해당 객체에 대한 참조 복사본보다 실제 상황에서는 원래 개체를 변경할 수 없다는 의미입니다. 수업을 통해 할 수 있습니다.

나는 항상 수업을 사용하는 것이 좋습니다. 아마도 수업에 익숙해 져서 추천하기가 편하기 때문입니다. 당신이 구조를 사용하기로 결정한다면, 당신은 차이점을 알고 있는지 확인하십시오

나는 간단하고 빠른 방법에 대한 호핑 된
+0

LinkedList 안의 "a"의 값이 바뀔 것입니다! – tweellt

+0

@tweellt : 당신 말이 맞아요, 제가 게시 한 코드에 충분히주의를 기울이지 않았습니다. 내 편집을 참조하십시오. – Neolisk

+0

감사합니다. 작동하는 것 같습니다. 이 변경이 성과에 어떤 영향을 미칠지에 대한 단서가 있습니까? – user2622509

0

귀하의 LinkedList의 유형은 tp이며, 그 값은 tp 유형의 개체입니다. 그런 다음 AddBeforenewtpRemove 예전를

dim newtp as tp 
newtp.a = 2 
newtp.b = lst.first.value.b 

: 새로운 구조를 제공해야하는 값을 변경하기 위해

.

+0

은 ...이 방법은 내 마음에 들어 왔지만 간단한 수정을하기에는 너무 많은 단계가 있습니다. – user2622509

관련 문제