为什么这个struct列表不允许我为字段赋值?

时间:2012-02-14 22:29:11

标签: vb.net .net-3.5

Public Structure testStruct
    Dim blah as integer
    Dim foo as string
    Dim bar as double
End Structure

'in another file ....

Public Function blahFooBar() as Boolean
    Dim tStrList as List (Of testStruct) = new List (Of testStruct)

    For i as integer = 0 To 10
        tStrList.Add(new testStruct)
        tStrList.Item(i).blah = 1
        tStrList.Item(i).foo = "Why won't I work?"
        tStrList.Item(i).bar = 100.100

        'last 3 lines give me error below
    Next

    return True
End Function

我得到的错误是:表达式是一个值,因此不能作为赋值的目标。

为什么呢?

3 个答案:

答案 0 :(得分:2)

在For循环中尝试以下内容:

Dim tmp As New testStruct()     
tmp.blah = 1
tmp.foo = "Why won't I work?"
tmp.bar = 100.100
tStrList.Add(tmp)

考虑到这一点,我认为它与.NET通过List(of t)访问它时复制结构的方式有关。

有更多信息here

答案 1 :(得分:2)

我认为使用类而不是结构。

您遇到困难的原因是您的结构是值类型。当您访问列表中值类型的实例时,您将获得该值的副本。然后,您尝试更改副本的值,从而导致错误。如果你曾经使用过一个类,那么你的代码就可以按照书面形式工作了。

答案 2 :(得分:1)

首先尝试创建对象

Dim X = New testStruct 

并在

中设置THAT属性
testStruct.blah = "fiddlesticks"

在将其添加到列表之前。