2014-03-29 22 views
0

我正在创建一个程序,该程序创建一个具有结构作为节点的链接列表。在某个点上,我需要更改特定节点(结构)中的某些值。以下是一些代码:如何编辑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

Thanks.It似乎工作。您是否有任何线索了解这种改变如何影响性能? – user2622509

0

您的LinkedList的类型为tp,因此其值为tp类型的对象。

为了改变,你必须提供一个新的结构值:

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

然后AddBeforenewtpRemove旧的。

+0

我跳了一个简单且快速的方法......这样来到我的脑海,但简单修改的​​步骤太多了。 – user2622509