0

オブジェクトをあるリストから別のリストにコピーし、元のリストを変更せずに編集したいと考えています。

Dim myList1 as New List(Of myObject)
myList1.Add(New myObject() With {.foo = 1, .bar = 0, .baz = 0})

Dim myList2 as New List(Of myObject)
myList2.AddRange(myList.Select(Function(x) x.bar = 1))
myList2.AddRange(myList.Select(Function(x) x.baz = 1))

希望myList2:

{.foo = 1, .bar = 1, .baz = 0}, {.foo = 1, .bar = 0, .baz = 1}

実際myList2:

{.foo = 1, .bar = 1, .baz = 0}, {.foo = 1, .bar = 1, .baz = 1}

私は何を間違っていますか?

LINQ がこれをネイティブに実行できず、この SO 投稿が推奨する.Clone()ようなカスタム拡張機能を作成する必要があるとは信じがたいです。

4

1 に答える 1

2

あなたの型は参照型であるため、LINQ はインスタンスのコピーを作成せず、参照をコピーするだけです。したがって、両方のリストに の同じインスタンスへの参照が含まれているため、myObjectそのような出力が表示されます。

オブジェクトを複製する独自の方法 (例: implement ICloneable) を作成するか、LINQ クエリを次のように変更できます。

myList2.AddRange(myList.Select(Function(x) new myObject With { .foo = x.foo, .bar = x.bar, .baz = 1 }))
于 2013-10-28T19:31:05.513 に答える