2012-02-14 7 views
2
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 

エラーは次のとおりです。式は値であるため、代入の対象にすることはできません。なぜstructのこのリストでフィールドに値を割り当てることができないのですか?

なぜですか?

+2

簡単な解決策:構造体を使用しないで、クラスを使用しますか? –

答えて

2

私は構造体ではなくクラスを使用するとの意見を2番目にします。

難しい理由は、構造体が値型であるためです。リストの値型のインスタンスにアクセスすると、値のコピーが得られます。次に、コピーの値を変更しようとしています。その結果、エラーが発生します。クラスを使用していた場合、コードは書かれたとおりに動作します。

1

Dim X = New testStruct 

、リストに追加する前に

testStruct.blah = "fiddlesticks" 

とそれにプロパティを設定するように、第1のオブジェクトを作成してみてください。

+0

私はそれをやろうとしましたが、構造体はクラスと同じようには動作しません。つまり、リスト内のすべての構造体が同じ構造体を指していたはずであり、構造体は同じではありません。 – dotnetN00b

+0

コンストラクタに* New *を付けても?面白い。それは私が覚えているものです。 – deadlyvices

+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コピーします(Tの)リスト経由でアクセスする構造体の方法とは何かを持っていると思います。

詳細はhereです。

関連する問題